parser.c revision 260139
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  /* Left hand side of the binary operation we are currently
1181     parsing.  */
1182  tree lhs;
1183  /* Original tree code for left hand side, if it was a binary
1184     expression itself (used for -Wparentheses).  */
1185  enum tree_code lhs_type;
1186  /* Tree code for the binary operation we are parsing.  */
1187  enum tree_code tree_type;
1188  /* Precedence of the binary operation we are parsing.  */
1189  int prec;
1190} cp_parser_expression_stack_entry;
1191
1192/* The stack for storing partial expressions.  We only need NUM_PREC_VALUES
1193   entries because precedence levels on the stack are monotonically
1194   increasing.  */
1195typedef struct cp_parser_expression_stack_entry
1196  cp_parser_expression_stack[NUM_PREC_VALUES];
1197
1198/* Context that is saved and restored when parsing tentatively.  */
1199typedef struct cp_parser_context GTY (())
1200{
1201  /* If this is a tentative parsing context, the status of the
1202     tentative parse.  */
1203  enum cp_parser_status_kind status;
1204  /* If non-NULL, we have just seen a `x->' or `x.' expression.  Names
1205     that are looked up in this context must be looked up both in the
1206     scope given by OBJECT_TYPE (the type of `x' or `*x') and also in
1207     the context of the containing expression.  */
1208  tree object_type;
1209
1210  /* The next parsing context in the stack.  */
1211  struct cp_parser_context *next;
1212} cp_parser_context;
1213
1214/* Prototypes.  */
1215
1216/* Constructors and destructors.  */
1217
1218static cp_parser_context *cp_parser_context_new
1219  (cp_parser_context *);
1220
1221/* Class variables.  */
1222
1223static GTY((deletable)) cp_parser_context* cp_parser_context_free_list;
1224
1225/* The operator-precedence table used by cp_parser_binary_expression.
1226   Transformed into an associative array (binops_by_token) by
1227   cp_parser_new.  */
1228
1229static const cp_parser_binary_operations_map_node binops[] = {
1230  { CPP_DEREF_STAR, MEMBER_REF, PREC_PM_EXPRESSION },
1231  { CPP_DOT_STAR, DOTSTAR_EXPR, PREC_PM_EXPRESSION },
1232
1233  { CPP_MULT, MULT_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1234  { CPP_DIV, TRUNC_DIV_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1235  { CPP_MOD, TRUNC_MOD_EXPR, PREC_MULTIPLICATIVE_EXPRESSION },
1236
1237  { CPP_PLUS, PLUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1238  { CPP_MINUS, MINUS_EXPR, PREC_ADDITIVE_EXPRESSION },
1239
1240  { CPP_LSHIFT, LSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1241  { CPP_RSHIFT, RSHIFT_EXPR, PREC_SHIFT_EXPRESSION },
1242
1243  { CPP_LESS, LT_EXPR, PREC_RELATIONAL_EXPRESSION },
1244  { CPP_GREATER, GT_EXPR, PREC_RELATIONAL_EXPRESSION },
1245  { CPP_LESS_EQ, LE_EXPR, PREC_RELATIONAL_EXPRESSION },
1246  { CPP_GREATER_EQ, GE_EXPR, PREC_RELATIONAL_EXPRESSION },
1247
1248  { CPP_EQ_EQ, EQ_EXPR, PREC_EQUALITY_EXPRESSION },
1249  { CPP_NOT_EQ, NE_EXPR, PREC_EQUALITY_EXPRESSION },
1250
1251  { CPP_AND, BIT_AND_EXPR, PREC_AND_EXPRESSION },
1252
1253  { CPP_XOR, BIT_XOR_EXPR, PREC_EXCLUSIVE_OR_EXPRESSION },
1254
1255  { CPP_OR, BIT_IOR_EXPR, PREC_INCLUSIVE_OR_EXPRESSION },
1256
1257  { CPP_AND_AND, TRUTH_ANDIF_EXPR, PREC_LOGICAL_AND_EXPRESSION },
1258
1259  { CPP_OR_OR, TRUTH_ORIF_EXPR, PREC_LOGICAL_OR_EXPRESSION }
1260};
1261
1262/* The same as binops, but initialized by cp_parser_new so that
1263   binops_by_token[N].token_type == N.  Used in cp_parser_binary_expression
1264   for speed.  */
1265static cp_parser_binary_operations_map_node binops_by_token[N_CP_TTYPES];
1266
1267/* Constructors and destructors.  */
1268
1269/* Construct a new context.  The context below this one on the stack
1270   is given by NEXT.  */
1271
1272static cp_parser_context *
1273cp_parser_context_new (cp_parser_context* next)
1274{
1275  cp_parser_context *context;
1276
1277  /* Allocate the storage.  */
1278  if (cp_parser_context_free_list != NULL)
1279    {
1280      /* Pull the first entry from the free list.  */
1281      context = cp_parser_context_free_list;
1282      cp_parser_context_free_list = context->next;
1283      memset (context, 0, sizeof (*context));
1284    }
1285  else
1286    context = GGC_CNEW (cp_parser_context);
1287
1288  /* No errors have occurred yet in this context.  */
1289  context->status = CP_PARSER_STATUS_KIND_NO_ERROR;
1290  /* If this is not the bottomost context, copy information that we
1291     need from the previous context.  */
1292  if (next)
1293    {
1294      /* If, in the NEXT context, we are parsing an `x->' or `x.'
1295	 expression, then we are parsing one in this context, too.  */
1296      context->object_type = next->object_type;
1297      /* Thread the stack.  */
1298      context->next = next;
1299    }
1300
1301  return context;
1302}
1303
1304/* The cp_parser structure represents the C++ parser.  */
1305
1306typedef struct cp_parser GTY(())
1307{
1308  /* The lexer from which we are obtaining tokens.  */
1309  cp_lexer *lexer;
1310
1311  /* The scope in which names should be looked up.  If NULL_TREE, then
1312     we look up names in the scope that is currently open in the
1313     source program.  If non-NULL, this is either a TYPE or
1314     NAMESPACE_DECL for the scope in which we should look.  It can
1315     also be ERROR_MARK, when we've parsed a bogus scope.
1316
1317     This value is not cleared automatically after a name is looked
1318     up, so we must be careful to clear it before starting a new look
1319     up sequence.  (If it is not cleared, then `X::Y' followed by `Z'
1320     will look up `Z' in the scope of `X', rather than the current
1321     scope.)  Unfortunately, it is difficult to tell when name lookup
1322     is complete, because we sometimes peek at a token, look it up,
1323     and then decide not to consume it.   */
1324  tree scope;
1325
1326  /* OBJECT_SCOPE and QUALIFYING_SCOPE give the scopes in which the
1327     last lookup took place.  OBJECT_SCOPE is used if an expression
1328     like "x->y" or "x.y" was used; it gives the type of "*x" or "x",
1329     respectively.  QUALIFYING_SCOPE is used for an expression of the
1330     form "X::Y"; it refers to X.  */
1331  tree object_scope;
1332  tree qualifying_scope;
1333
1334  /* A stack of parsing contexts.  All but the bottom entry on the
1335     stack will be tentative contexts.
1336
1337     We parse tentatively in order to determine which construct is in
1338     use in some situations.  For example, in order to determine
1339     whether a statement is an expression-statement or a
1340     declaration-statement we parse it tentatively as a
1341     declaration-statement.  If that fails, we then reparse the same
1342     token stream as an expression-statement.  */
1343  cp_parser_context *context;
1344
1345  /* True if we are parsing GNU C++.  If this flag is not set, then
1346     GNU extensions are not recognized.  */
1347  bool allow_gnu_extensions_p;
1348
1349  /* TRUE if the `>' token should be interpreted as the greater-than
1350     operator.  FALSE if it is the end of a template-id or
1351     template-parameter-list.  */
1352  bool greater_than_is_operator_p;
1353
1354  /* TRUE if default arguments are allowed within a parameter list
1355     that starts at this point. FALSE if only a gnu extension makes
1356     them permissible.  */
1357  bool default_arg_ok_p;
1358
1359  /* TRUE if we are parsing an integral constant-expression.  See
1360     [expr.const] for a precise definition.  */
1361  bool integral_constant_expression_p;
1362
1363  /* TRUE if we are parsing an integral constant-expression -- but a
1364     non-constant expression should be permitted as well.  This flag
1365     is used when parsing an array bound so that GNU variable-length
1366     arrays are tolerated.  */
1367  bool allow_non_integral_constant_expression_p;
1368
1369  /* TRUE if ALLOW_NON_CONSTANT_EXPRESSION_P is TRUE and something has
1370     been seen that makes the expression non-constant.  */
1371  bool non_integral_constant_expression_p;
1372
1373  /* TRUE if local variable names and `this' are forbidden in the
1374     current context.  */
1375  bool local_variables_forbidden_p;
1376
1377  /* TRUE if the declaration we are parsing is part of a
1378     linkage-specification of the form `extern string-literal
1379     declaration'.  */
1380  bool in_unbraced_linkage_specification_p;
1381
1382  /* TRUE if we are presently parsing a declarator, after the
1383     direct-declarator.  */
1384  bool in_declarator_p;
1385
1386  /* TRUE if we are presently parsing a template-argument-list.  */
1387  bool in_template_argument_list_p;
1388
1389  /* Set to IN_ITERATION_STMT if parsing an iteration-statement,
1390     to IN_OMP_BLOCK if parsing OpenMP structured block and
1391     IN_OMP_FOR if parsing OpenMP loop.  If parsing a switch statement,
1392     this is bitwise ORed with IN_SWITCH_STMT, unless parsing an
1393     iteration-statement, OpenMP block or loop within that switch.  */
1394#define IN_SWITCH_STMT		1
1395#define IN_ITERATION_STMT	2
1396#define IN_OMP_BLOCK		4
1397#define IN_OMP_FOR		8
1398  unsigned char in_statement;
1399
1400  /* TRUE if we are presently parsing the body of a switch statement.
1401     Note that this doesn't quite overlap with in_statement above.
1402     The difference relates to giving the right sets of error messages:
1403     "case not in switch" vs "break statement used with OpenMP...".  */
1404  bool in_switch_statement_p;
1405
1406  /* TRUE if we are parsing a type-id in an expression context.  In
1407     such a situation, both "type (expr)" and "type (type)" are valid
1408     alternatives.  */
1409  bool in_type_id_in_expr_p;
1410
1411  /* TRUE if we are currently in a header file where declarations are
1412     implicitly extern "C".  */
1413  bool implicit_extern_c;
1414
1415  /* TRUE if strings in expressions should be translated to the execution
1416     character set.  */
1417  bool translate_strings_p;
1418
1419  /* TRUE if we are presently parsing the body of a function, but not
1420     a local class.  */
1421  bool in_function_body;
1422
1423  /* If non-NULL, then we are parsing a construct where new type
1424     definitions are not permitted.  The string stored here will be
1425     issued as an error message if a type is defined.  */
1426  const char *type_definition_forbidden_message;
1427
1428  /* A list of lists. The outer list is a stack, used for member
1429     functions of local classes. At each level there are two sub-list,
1430     one on TREE_VALUE and one on TREE_PURPOSE. Each of those
1431     sub-lists has a FUNCTION_DECL or TEMPLATE_DECL on their
1432     TREE_VALUE's. The functions are chained in reverse declaration
1433     order.
1434
1435     The TREE_PURPOSE sublist contains those functions with default
1436     arguments that need post processing, and the TREE_VALUE sublist
1437     contains those functions with definitions that need post
1438     processing.
1439
1440     These lists can only be processed once the outermost class being
1441     defined is complete.  */
1442  tree unparsed_functions_queues;
1443
1444  /* The number of classes whose definitions are currently in
1445     progress.  */
1446  unsigned num_classes_being_defined;
1447
1448  /* The number of template parameter lists that apply directly to the
1449     current declaration.  */
1450  unsigned num_template_parameter_lists;
1451} cp_parser;
1452
1453/* Prototypes.  */
1454
1455/* Constructors and destructors.  */
1456
1457static cp_parser *cp_parser_new
1458  (void);
1459
1460/* Routines to parse various constructs.
1461
1462   Those that return `tree' will return the error_mark_node (rather
1463   than NULL_TREE) if a parse error occurs, unless otherwise noted.
1464   Sometimes, they will return an ordinary node if error-recovery was
1465   attempted, even though a parse error occurred.  So, to check
1466   whether or not a parse error occurred, you should always use
1467   cp_parser_error_occurred.  If the construct is optional (indicated
1468   either by an `_opt' in the name of the function that does the
1469   parsing or via a FLAGS parameter), then NULL_TREE is returned if
1470   the construct is not present.  */
1471
1472/* Lexical conventions [gram.lex]  */
1473
1474static tree cp_parser_identifier
1475  (cp_parser *);
1476static tree cp_parser_string_literal
1477  (cp_parser *, bool, bool);
1478
1479/* Basic concepts [gram.basic]  */
1480
1481static bool cp_parser_translation_unit
1482  (cp_parser *);
1483
1484/* Expressions [gram.expr]  */
1485
1486static tree cp_parser_primary_expression
1487  (cp_parser *, bool, bool, bool, cp_id_kind *);
1488static tree cp_parser_id_expression
1489  (cp_parser *, bool, bool, bool *, bool, bool);
1490static tree cp_parser_unqualified_id
1491  (cp_parser *, bool, bool, bool, bool);
1492static tree cp_parser_nested_name_specifier_opt
1493  (cp_parser *, bool, bool, bool, bool);
1494static tree cp_parser_nested_name_specifier
1495  (cp_parser *, bool, bool, bool, bool);
1496static tree cp_parser_class_or_namespace_name
1497  (cp_parser *, bool, bool, bool, bool, bool);
1498static tree cp_parser_postfix_expression
1499  (cp_parser *, bool, bool);
1500static tree cp_parser_postfix_open_square_expression
1501  (cp_parser *, tree, bool);
1502static tree cp_parser_postfix_dot_deref_expression
1503  (cp_parser *, enum cpp_ttype, tree, bool, cp_id_kind *);
1504static tree cp_parser_parenthesized_expression_list
1505  (cp_parser *, bool, bool, bool *);
1506static void cp_parser_pseudo_destructor_name
1507  (cp_parser *, tree *, tree *);
1508static tree cp_parser_unary_expression
1509  (cp_parser *, bool, bool);
1510static enum tree_code cp_parser_unary_operator
1511  (cp_token *);
1512static tree cp_parser_new_expression
1513  (cp_parser *);
1514static tree cp_parser_new_placement
1515  (cp_parser *);
1516static tree cp_parser_new_type_id
1517  (cp_parser *, tree *);
1518static cp_declarator *cp_parser_new_declarator_opt
1519  (cp_parser *);
1520static cp_declarator *cp_parser_direct_new_declarator
1521  (cp_parser *);
1522static tree cp_parser_new_initializer
1523  (cp_parser *);
1524static tree cp_parser_delete_expression
1525  (cp_parser *);
1526static tree cp_parser_cast_expression
1527  (cp_parser *, bool, bool);
1528static tree cp_parser_binary_expression
1529  (cp_parser *, bool);
1530static tree cp_parser_question_colon_clause
1531  (cp_parser *, tree);
1532static tree cp_parser_assignment_expression
1533  (cp_parser *, bool);
1534static enum tree_code cp_parser_assignment_operator_opt
1535  (cp_parser *);
1536static tree cp_parser_expression
1537  (cp_parser *, bool);
1538static tree cp_parser_constant_expression
1539  (cp_parser *, bool, bool *);
1540static tree cp_parser_builtin_offsetof
1541  (cp_parser *);
1542
1543/* Statements [gram.stmt.stmt]  */
1544
1545static void cp_parser_statement
1546  (cp_parser *, tree, bool, bool *);
1547static void cp_parser_label_for_labeled_statement
1548  (cp_parser *);
1549static tree cp_parser_expression_statement
1550  (cp_parser *, tree);
1551static tree cp_parser_compound_statement
1552  (cp_parser *, tree, bool);
1553static void cp_parser_statement_seq_opt
1554  (cp_parser *, tree);
1555static tree cp_parser_selection_statement
1556  (cp_parser *, bool *);
1557static tree cp_parser_condition
1558  (cp_parser *);
1559static tree cp_parser_iteration_statement
1560  (cp_parser *);
1561static void cp_parser_for_init_statement
1562  (cp_parser *);
1563static tree cp_parser_jump_statement
1564  (cp_parser *);
1565static void cp_parser_declaration_statement
1566  (cp_parser *);
1567
1568static tree cp_parser_implicitly_scoped_statement
1569  (cp_parser *, bool *);
1570static void cp_parser_already_scoped_statement
1571  (cp_parser *);
1572
1573/* Declarations [gram.dcl.dcl] */
1574
1575static void cp_parser_declaration_seq_opt
1576  (cp_parser *);
1577static void cp_parser_declaration
1578  (cp_parser *);
1579static void cp_parser_block_declaration
1580  (cp_parser *, bool);
1581static void cp_parser_simple_declaration
1582  (cp_parser *, bool);
1583static void cp_parser_decl_specifier_seq
1584  (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, int *);
1585static tree cp_parser_storage_class_specifier_opt
1586  (cp_parser *);
1587static tree cp_parser_function_specifier_opt
1588  (cp_parser *, cp_decl_specifier_seq *);
1589static tree cp_parser_type_specifier
1590  (cp_parser *, cp_parser_flags, cp_decl_specifier_seq *, bool,
1591   int *, bool *);
1592static tree cp_parser_simple_type_specifier
1593  (cp_parser *, cp_decl_specifier_seq *, cp_parser_flags);
1594static tree cp_parser_type_name
1595  (cp_parser *);
1596static tree cp_parser_elaborated_type_specifier
1597  (cp_parser *, bool, bool);
1598static tree cp_parser_enum_specifier
1599  (cp_parser *);
1600static void cp_parser_enumerator_list
1601  (cp_parser *, tree);
1602static void cp_parser_enumerator_definition
1603  (cp_parser *, tree);
1604static tree cp_parser_namespace_name
1605  (cp_parser *);
1606static void cp_parser_namespace_definition
1607  (cp_parser *);
1608static void cp_parser_namespace_body
1609  (cp_parser *);
1610static tree cp_parser_qualified_namespace_specifier
1611  (cp_parser *);
1612static void cp_parser_namespace_alias_definition
1613  (cp_parser *);
1614static bool cp_parser_using_declaration
1615  (cp_parser *, bool);
1616static void cp_parser_using_directive
1617  (cp_parser *);
1618static void cp_parser_asm_definition
1619  (cp_parser *);
1620static void cp_parser_linkage_specification
1621  (cp_parser *);
1622
1623/* Declarators [gram.dcl.decl] */
1624
1625static tree cp_parser_init_declarator
1626  (cp_parser *, cp_decl_specifier_seq *, VEC (deferred_access_check,gc)*, bool, bool, int, bool *);
1627static cp_declarator *cp_parser_declarator
1628  (cp_parser *, cp_parser_declarator_kind, int *, bool *, bool);
1629static cp_declarator *cp_parser_direct_declarator
1630  (cp_parser *, cp_parser_declarator_kind, int *, bool);
1631static enum tree_code cp_parser_ptr_operator
1632  (cp_parser *, tree *, cp_cv_quals *);
1633static cp_cv_quals cp_parser_cv_qualifier_seq_opt
1634  (cp_parser *);
1635static tree cp_parser_declarator_id
1636  (cp_parser *, bool);
1637static tree cp_parser_type_id
1638  (cp_parser *);
1639static void cp_parser_type_specifier_seq
1640  (cp_parser *, bool, cp_decl_specifier_seq *);
1641static cp_parameter_declarator *cp_parser_parameter_declaration_clause
1642  (cp_parser *);
1643static cp_parameter_declarator *cp_parser_parameter_declaration_list
1644  (cp_parser *, bool *);
1645static cp_parameter_declarator *cp_parser_parameter_declaration
1646  (cp_parser *, bool, bool *);
1647static void cp_parser_function_body
1648  (cp_parser *);
1649static tree cp_parser_initializer
1650  (cp_parser *, bool *, bool *);
1651static tree cp_parser_initializer_clause
1652  (cp_parser *, bool *);
1653static VEC(constructor_elt,gc) *cp_parser_initializer_list
1654  (cp_parser *, bool *);
1655
1656static bool cp_parser_ctor_initializer_opt_and_function_body
1657  (cp_parser *);
1658
1659/* Classes [gram.class] */
1660
1661static tree cp_parser_class_name
1662  (cp_parser *, bool, bool, enum tag_types, bool, bool, bool);
1663static tree cp_parser_class_specifier
1664  (cp_parser *);
1665static tree cp_parser_class_head
1666  (cp_parser *, bool *, tree *, tree *);
1667static enum tag_types cp_parser_class_key
1668  (cp_parser *);
1669static void cp_parser_member_specification_opt
1670  (cp_parser *);
1671static void cp_parser_member_declaration
1672  (cp_parser *);
1673static tree cp_parser_pure_specifier
1674  (cp_parser *);
1675static tree cp_parser_constant_initializer
1676  (cp_parser *);
1677
1678/* Derived classes [gram.class.derived] */
1679
1680static tree cp_parser_base_clause
1681  (cp_parser *);
1682static tree cp_parser_base_specifier
1683  (cp_parser *);
1684
1685/* Special member functions [gram.special] */
1686
1687static tree cp_parser_conversion_function_id
1688  (cp_parser *);
1689static tree cp_parser_conversion_type_id
1690  (cp_parser *);
1691static cp_declarator *cp_parser_conversion_declarator_opt
1692  (cp_parser *);
1693static bool cp_parser_ctor_initializer_opt
1694  (cp_parser *);
1695static void cp_parser_mem_initializer_list
1696  (cp_parser *);
1697static tree cp_parser_mem_initializer
1698  (cp_parser *);
1699static tree cp_parser_mem_initializer_id
1700  (cp_parser *);
1701
1702/* Overloading [gram.over] */
1703
1704static tree cp_parser_operator_function_id
1705  (cp_parser *);
1706static tree cp_parser_operator
1707  (cp_parser *);
1708
1709/* Templates [gram.temp] */
1710
1711static void cp_parser_template_declaration
1712  (cp_parser *, bool);
1713static tree cp_parser_template_parameter_list
1714  (cp_parser *);
1715static tree cp_parser_template_parameter
1716  (cp_parser *, bool *);
1717static tree cp_parser_type_parameter
1718  (cp_parser *);
1719static tree cp_parser_template_id
1720  (cp_parser *, bool, bool, bool);
1721static tree cp_parser_template_name
1722  (cp_parser *, bool, bool, bool, bool *);
1723static tree cp_parser_template_argument_list
1724  (cp_parser *);
1725static tree cp_parser_template_argument
1726  (cp_parser *);
1727static void cp_parser_explicit_instantiation
1728  (cp_parser *);
1729static void cp_parser_explicit_specialization
1730  (cp_parser *);
1731
1732/* Exception handling [gram.exception] */
1733
1734static tree cp_parser_try_block
1735  (cp_parser *);
1736static bool cp_parser_function_try_block
1737  (cp_parser *);
1738static void cp_parser_handler_seq
1739  (cp_parser *);
1740static void cp_parser_handler
1741  (cp_parser *);
1742static tree cp_parser_exception_declaration
1743  (cp_parser *);
1744static tree cp_parser_throw_expression
1745  (cp_parser *);
1746static tree cp_parser_exception_specification_opt
1747  (cp_parser *);
1748static tree cp_parser_type_id_list
1749  (cp_parser *);
1750
1751/* GNU Extensions */
1752
1753static tree cp_parser_asm_specification_opt
1754  (cp_parser *);
1755static tree cp_parser_asm_operand_list
1756  (cp_parser *);
1757static tree cp_parser_asm_clobber_list
1758  (cp_parser *);
1759static tree cp_parser_attributes_opt
1760  (cp_parser *);
1761static tree cp_parser_attribute_list
1762  (cp_parser *);
1763static bool cp_parser_extension_opt
1764  (cp_parser *, int *);
1765static void cp_parser_label_declaration
1766  (cp_parser *);
1767
1768enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1769static bool cp_parser_pragma
1770  (cp_parser *, enum pragma_context);
1771
1772/* Objective-C++ Productions */
1773
1774static tree cp_parser_objc_message_receiver
1775  (cp_parser *);
1776static tree cp_parser_objc_message_args
1777  (cp_parser *);
1778static tree cp_parser_objc_message_expression
1779  (cp_parser *);
1780static tree cp_parser_objc_encode_expression
1781  (cp_parser *);
1782static tree cp_parser_objc_defs_expression
1783  (cp_parser *);
1784static tree cp_parser_objc_protocol_expression
1785  (cp_parser *);
1786static tree cp_parser_objc_selector_expression
1787  (cp_parser *);
1788static tree cp_parser_objc_expression
1789  (cp_parser *);
1790static bool cp_parser_objc_selector_p
1791  (enum cpp_ttype);
1792static tree cp_parser_objc_selector
1793  (cp_parser *);
1794static tree cp_parser_objc_protocol_refs_opt
1795  (cp_parser *);
1796static void cp_parser_objc_declaration
1797  (cp_parser *);
1798static tree cp_parser_objc_statement
1799  (cp_parser *);
1800
1801/* Utility Routines */
1802
1803static tree cp_parser_lookup_name
1804  (cp_parser *, tree, enum tag_types, bool, bool, bool, tree *);
1805static tree cp_parser_lookup_name_simple
1806  (cp_parser *, tree);
1807static tree cp_parser_maybe_treat_template_as_class
1808  (tree, bool);
1809static bool cp_parser_check_declarator_template_parameters
1810  (cp_parser *, cp_declarator *);
1811static bool cp_parser_check_template_parameters
1812  (cp_parser *, unsigned);
1813static tree cp_parser_simple_cast_expression
1814  (cp_parser *);
1815static tree cp_parser_global_scope_opt
1816  (cp_parser *, bool);
1817static bool cp_parser_constructor_declarator_p
1818  (cp_parser *, bool);
1819static tree cp_parser_function_definition_from_specifiers_and_declarator
1820  (cp_parser *, cp_decl_specifier_seq *, tree, const cp_declarator *);
1821static tree cp_parser_function_definition_after_declarator
1822  (cp_parser *, bool);
1823static void cp_parser_template_declaration_after_export
1824  (cp_parser *, bool);
1825static void cp_parser_perform_template_parameter_access_checks
1826  (VEC (deferred_access_check,gc)*);
1827static tree cp_parser_single_declaration
1828  (cp_parser *, VEC (deferred_access_check,gc)*, bool, bool *);
1829static tree cp_parser_functional_cast
1830  (cp_parser *, tree);
1831static tree cp_parser_save_member_function_body
1832  (cp_parser *, cp_decl_specifier_seq *, cp_declarator *, tree);
1833static tree cp_parser_enclosed_template_argument_list
1834  (cp_parser *);
1835static void cp_parser_save_default_args
1836  (cp_parser *, tree);
1837static void cp_parser_late_parsing_for_member
1838  (cp_parser *, tree);
1839static void cp_parser_late_parsing_default_args
1840  (cp_parser *, tree);
1841static tree cp_parser_sizeof_operand
1842  (cp_parser *, enum rid);
1843static bool cp_parser_declares_only_class_p
1844  (cp_parser *);
1845static void cp_parser_set_storage_class
1846  (cp_parser *, cp_decl_specifier_seq *, enum rid);
1847static void cp_parser_set_decl_spec_type
1848  (cp_decl_specifier_seq *, tree, bool);
1849static bool cp_parser_friend_p
1850  (const cp_decl_specifier_seq *);
1851static cp_token *cp_parser_require
1852  (cp_parser *, enum cpp_ttype, const char *);
1853static cp_token *cp_parser_require_keyword
1854  (cp_parser *, enum rid, const char *);
1855static bool cp_parser_token_starts_function_definition_p
1856  (cp_token *);
1857static bool cp_parser_next_token_starts_class_definition_p
1858  (cp_parser *);
1859static bool cp_parser_next_token_ends_template_argument_p
1860  (cp_parser *);
1861static bool cp_parser_nth_token_starts_template_argument_list_p
1862  (cp_parser *, size_t);
1863static enum tag_types cp_parser_token_is_class_key
1864  (cp_token *);
1865static void cp_parser_check_class_key
1866  (enum tag_types, tree type);
1867static void cp_parser_check_access_in_redeclaration
1868  (tree type);
1869static bool cp_parser_optional_template_keyword
1870  (cp_parser *);
1871static void cp_parser_pre_parsed_nested_name_specifier
1872  (cp_parser *);
1873static void cp_parser_cache_group
1874  (cp_parser *, enum cpp_ttype, unsigned);
1875static void cp_parser_parse_tentatively
1876  (cp_parser *);
1877static void cp_parser_commit_to_tentative_parse
1878  (cp_parser *);
1879static void cp_parser_abort_tentative_parse
1880  (cp_parser *);
1881static bool cp_parser_parse_definitely
1882  (cp_parser *);
1883static inline bool cp_parser_parsing_tentatively
1884  (cp_parser *);
1885static bool cp_parser_uncommitted_to_tentative_parse_p
1886  (cp_parser *);
1887static void cp_parser_error
1888  (cp_parser *, const char *);
1889static void cp_parser_name_lookup_error
1890  (cp_parser *, tree, tree, const char *);
1891static bool cp_parser_simulate_error
1892  (cp_parser *);
1893static bool cp_parser_check_type_definition
1894  (cp_parser *);
1895static void cp_parser_check_for_definition_in_return_type
1896  (cp_declarator *, tree);
1897static void cp_parser_check_for_invalid_template_id
1898  (cp_parser *, tree);
1899static bool cp_parser_non_integral_constant_expression
1900  (cp_parser *, const char *);
1901static void cp_parser_diagnose_invalid_type_name
1902  (cp_parser *, tree, tree);
1903static bool cp_parser_parse_and_diagnose_invalid_type_name
1904  (cp_parser *);
1905static int cp_parser_skip_to_closing_parenthesis
1906  (cp_parser *, bool, bool, bool);
1907static void cp_parser_skip_to_end_of_statement
1908  (cp_parser *);
1909static void cp_parser_consume_semicolon_at_end_of_statement
1910  (cp_parser *);
1911static void cp_parser_skip_to_end_of_block_or_statement
1912  (cp_parser *);
1913static void cp_parser_skip_to_closing_brace
1914  (cp_parser *);
1915static void cp_parser_skip_to_end_of_template_parameter_list
1916  (cp_parser *);
1917static void cp_parser_skip_to_pragma_eol
1918  (cp_parser*, cp_token *);
1919static bool cp_parser_error_occurred
1920  (cp_parser *);
1921static bool cp_parser_allow_gnu_extensions_p
1922  (cp_parser *);
1923static bool cp_parser_is_string_literal
1924  (cp_token *);
1925static bool cp_parser_is_keyword
1926  (cp_token *, enum rid);
1927static tree cp_parser_make_typename_type
1928  (cp_parser *, tree, tree);
1929
1930/* Returns nonzero if we are parsing tentatively.  */
1931
1932static inline bool
1933cp_parser_parsing_tentatively (cp_parser* parser)
1934{
1935  return parser->context->next != NULL;
1936}
1937
1938/* Returns nonzero if TOKEN is a string literal.  */
1939
1940static bool
1941cp_parser_is_string_literal (cp_token* token)
1942{
1943  return (token->type == CPP_STRING || token->type == CPP_WSTRING);
1944}
1945
1946/* Returns nonzero if TOKEN is the indicated KEYWORD.  */
1947
1948static bool
1949cp_parser_is_keyword (cp_token* token, enum rid keyword)
1950{
1951  return token->keyword == keyword;
1952}
1953
1954/* If not parsing tentatively, issue a diagnostic of the form
1955      FILE:LINE: MESSAGE before TOKEN
1956   where TOKEN is the next token in the input stream.  MESSAGE
1957   (specified by the caller) is usually of the form "expected
1958   OTHER-TOKEN".  */
1959
1960static void
1961cp_parser_error (cp_parser* parser, const char* message)
1962{
1963  if (!cp_parser_simulate_error (parser))
1964    {
1965      cp_token *token = cp_lexer_peek_token (parser->lexer);
1966      /* This diagnostic makes more sense if it is tagged to the line
1967	 of the token we just peeked at.  */
1968      cp_lexer_set_source_position_from_token (token);
1969
1970      if (token->type == CPP_PRAGMA)
1971	{
1972	  error ("%<#pragma%> is not allowed here");
1973	  cp_parser_skip_to_pragma_eol (parser, token);
1974	  return;
1975	}
1976
1977      c_parse_error (message,
1978		     /* Because c_parser_error does not understand
1979			CPP_KEYWORD, keywords are treated like
1980			identifiers.  */
1981		     (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
1982		     token->u.value);
1983    }
1984}
1985
1986/* Issue an error about name-lookup failing.  NAME is the
1987   IDENTIFIER_NODE DECL is the result of
1988   the lookup (as returned from cp_parser_lookup_name).  DESIRED is
1989   the thing that we hoped to find.  */
1990
1991static void
1992cp_parser_name_lookup_error (cp_parser* parser,
1993			     tree name,
1994			     tree decl,
1995			     const char* desired)
1996{
1997  /* If name lookup completely failed, tell the user that NAME was not
1998     declared.  */
1999  if (decl == error_mark_node)
2000    {
2001      if (parser->scope && parser->scope != global_namespace)
2002	error ("%<%D::%D%> has not been declared",
2003	       parser->scope, name);
2004      else if (parser->scope == global_namespace)
2005	error ("%<::%D%> has not been declared", name);
2006      else if (parser->object_scope
2007	       && !CLASS_TYPE_P (parser->object_scope))
2008	error ("request for member %qD in non-class type %qT",
2009	       name, parser->object_scope);
2010      else if (parser->object_scope)
2011	error ("%<%T::%D%> has not been declared",
2012	       parser->object_scope, name);
2013      else
2014	error ("%qD has not been declared", name);
2015    }
2016  else if (parser->scope && parser->scope != global_namespace)
2017    error ("%<%D::%D%> %s", parser->scope, name, desired);
2018  else if (parser->scope == global_namespace)
2019    error ("%<::%D%> %s", name, desired);
2020  else
2021    error ("%qD %s", name, desired);
2022}
2023
2024/* If we are parsing tentatively, remember that an error has occurred
2025   during this tentative parse.  Returns true if the error was
2026   simulated; false if a message should be issued by the caller.  */
2027
2028static bool
2029cp_parser_simulate_error (cp_parser* parser)
2030{
2031  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2032    {
2033      parser->context->status = CP_PARSER_STATUS_KIND_ERROR;
2034      return true;
2035    }
2036  return false;
2037}
2038
2039/* Check for repeated decl-specifiers.  */
2040
2041static void
2042cp_parser_check_decl_spec (cp_decl_specifier_seq *decl_specs)
2043{
2044  cp_decl_spec ds;
2045
2046  for (ds = ds_first; ds != ds_last; ++ds)
2047    {
2048      unsigned count = decl_specs->specs[(int)ds];
2049      if (count < 2)
2050	continue;
2051      /* The "long" specifier is a special case because of "long long".  */
2052      if (ds == ds_long)
2053	{
2054	  if (count > 2)
2055	    error ("%<long long long%> is too long for GCC");
2056	  else if (pedantic && !in_system_header && warn_long_long)
2057	    pedwarn ("ISO C++ does not support %<long long%>");
2058	}
2059      else if (count > 1)
2060	{
2061	  static const char *const decl_spec_names[] = {
2062	    "signed",
2063	    "unsigned",
2064	    "short",
2065	    "long",
2066	    "const",
2067	    "volatile",
2068	    "restrict",
2069	    "inline",
2070	    "virtual",
2071	    "explicit",
2072	    "friend",
2073	    "typedef",
2074	    "__complex",
2075	    "__thread"
2076	  };
2077	  error ("duplicate %qs", decl_spec_names[(int)ds]);
2078	}
2079    }
2080}
2081
2082/* This function is called when a type is defined.  If type
2083   definitions are forbidden at this point, an error message is
2084   issued.  */
2085
2086static bool
2087cp_parser_check_type_definition (cp_parser* parser)
2088{
2089  /* If types are forbidden here, issue a message.  */
2090  if (parser->type_definition_forbidden_message)
2091    {
2092      /* Use `%s' to print the string in case there are any escape
2093	 characters in the message.  */
2094      error ("%s", parser->type_definition_forbidden_message);
2095      return false;
2096    }
2097  return true;
2098}
2099
2100/* This function is called when the DECLARATOR is processed.  The TYPE
2101   was a type defined in the decl-specifiers.  If it is invalid to
2102   define a type in the decl-specifiers for DECLARATOR, an error is
2103   issued.  */
2104
2105static void
2106cp_parser_check_for_definition_in_return_type (cp_declarator *declarator,
2107					       tree type)
2108{
2109  /* [dcl.fct] forbids type definitions in return types.
2110     Unfortunately, it's not easy to know whether or not we are
2111     processing a return type until after the fact.  */
2112  while (declarator
2113	 && (declarator->kind == cdk_pointer
2114	     || declarator->kind == cdk_reference
2115	     || declarator->kind == cdk_ptrmem))
2116    declarator = declarator->declarator;
2117  if (declarator
2118      && declarator->kind == cdk_function)
2119    {
2120      error ("new types may not be defined in a return type");
2121      inform ("(perhaps a semicolon is missing after the definition of %qT)",
2122	      type);
2123    }
2124}
2125
2126/* A type-specifier (TYPE) has been parsed which cannot be followed by
2127   "<" in any valid C++ program.  If the next token is indeed "<",
2128   issue a message warning the user about what appears to be an
2129   invalid attempt to form a template-id.  */
2130
2131static void
2132cp_parser_check_for_invalid_template_id (cp_parser* parser,
2133					 tree type)
2134{
2135  cp_token_position start = 0;
2136
2137  if (cp_lexer_next_token_is (parser->lexer, CPP_LESS))
2138    {
2139      if (TYPE_P (type))
2140	error ("%qT is not a template", type);
2141      else if (TREE_CODE (type) == IDENTIFIER_NODE)
2142	error ("%qE is not a template", type);
2143      else
2144	error ("invalid template-id");
2145      /* Remember the location of the invalid "<".  */
2146      if (cp_parser_uncommitted_to_tentative_parse_p (parser))
2147	start = cp_lexer_token_position (parser->lexer, true);
2148      /* Consume the "<".  */
2149      cp_lexer_consume_token (parser->lexer);
2150      /* Parse the template arguments.  */
2151      cp_parser_enclosed_template_argument_list (parser);
2152      /* Permanently remove the invalid template arguments so that
2153	 this error message is not issued again.  */
2154      if (start)
2155	cp_lexer_purge_tokens_after (parser->lexer, start);
2156    }
2157}
2158
2159/* If parsing an integral constant-expression, issue an error message
2160   about the fact that THING appeared and return true.  Otherwise,
2161   return false.  In either case, set
2162   PARSER->NON_INTEGRAL_CONSTANT_EXPRESSION_P.  */
2163
2164static bool
2165cp_parser_non_integral_constant_expression (cp_parser  *parser,
2166					    const char *thing)
2167{
2168  parser->non_integral_constant_expression_p = true;
2169  if (parser->integral_constant_expression_p)
2170    {
2171      if (!parser->allow_non_integral_constant_expression_p)
2172	{
2173	  error ("%s cannot appear in a constant-expression", thing);
2174	  return true;
2175	}
2176    }
2177  return false;
2178}
2179
2180/* Emit a diagnostic for an invalid type name.  SCOPE is the
2181   qualifying scope (or NULL, if none) for ID.  This function commits
2182   to the current active tentative parse, if any.  (Otherwise, the
2183   problematic construct might be encountered again later, resulting
2184   in duplicate error messages.)  */
2185
2186static void
2187cp_parser_diagnose_invalid_type_name (cp_parser *parser, tree scope, tree id)
2188{
2189  tree decl, old_scope;
2190  /* Try to lookup the identifier.  */
2191  old_scope = parser->scope;
2192  parser->scope = scope;
2193  decl = cp_parser_lookup_name_simple (parser, id);
2194  parser->scope = old_scope;
2195  /* If the lookup found a template-name, it means that the user forgot
2196  to specify an argument list. Emit a useful error message.  */
2197  if (TREE_CODE (decl) == TEMPLATE_DECL)
2198    error ("invalid use of template-name %qE without an argument list", decl);
2199  else if (TREE_CODE (id) == BIT_NOT_EXPR)
2200    error ("invalid use of destructor %qD as a type", id);
2201  else if (TREE_CODE (decl) == TYPE_DECL)
2202    /* Something like 'unsigned A a;'  */
2203    error ("invalid combination of multiple type-specifiers");
2204  else if (!parser->scope)
2205    {
2206      /* Issue an error message.  */
2207      error ("%qE does not name a type", id);
2208      /* If we're in a template class, it's possible that the user was
2209	 referring to a type from a base class.  For example:
2210
2211	   template <typename T> struct A { typedef T X; };
2212	   template <typename T> struct B : public A<T> { X x; };
2213
2214	 The user should have said "typename A<T>::X".  */
2215      if (processing_template_decl && current_class_type
2216	  && TYPE_BINFO (current_class_type))
2217	{
2218	  tree b;
2219
2220	  for (b = TREE_CHAIN (TYPE_BINFO (current_class_type));
2221	       b;
2222	       b = TREE_CHAIN (b))
2223	    {
2224	      tree base_type = BINFO_TYPE (b);
2225	      if (CLASS_TYPE_P (base_type)
2226		  && dependent_type_p (base_type))
2227		{
2228		  tree field;
2229		  /* Go from a particular instantiation of the
2230		     template (which will have an empty TYPE_FIELDs),
2231		     to the main version.  */
2232		  base_type = CLASSTYPE_PRIMARY_TEMPLATE_TYPE (base_type);
2233		  for (field = TYPE_FIELDS (base_type);
2234		       field;
2235		       field = TREE_CHAIN (field))
2236		    if (TREE_CODE (field) == TYPE_DECL
2237			&& DECL_NAME (field) == id)
2238		      {
2239			inform ("(perhaps %<typename %T::%E%> was intended)",
2240				BINFO_TYPE (b), id);
2241			break;
2242		      }
2243		  if (field)
2244		    break;
2245		}
2246	    }
2247	}
2248    }
2249  /* Here we diagnose qualified-ids where the scope is actually correct,
2250     but the identifier does not resolve to a valid type name.  */
2251  else if (parser->scope != error_mark_node)
2252    {
2253      if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
2254	error ("%qE in namespace %qE does not name a type",
2255	       id, parser->scope);
2256      else if (TYPE_P (parser->scope))
2257	error ("%qE in class %qT does not name a type", id, parser->scope);
2258      else
2259	gcc_unreachable ();
2260    }
2261  cp_parser_commit_to_tentative_parse (parser);
2262}
2263
2264/* Check for a common situation where a type-name should be present,
2265   but is not, and issue a sensible error message.  Returns true if an
2266   invalid type-name was detected.
2267
2268   The situation handled by this function are variable declarations of the
2269   form `ID a', where `ID' is an id-expression and `a' is a plain identifier.
2270   Usually, `ID' should name a type, but if we got here it means that it
2271   does not. We try to emit the best possible error message depending on
2272   how exactly the id-expression looks like.  */
2273
2274static bool
2275cp_parser_parse_and_diagnose_invalid_type_name (cp_parser *parser)
2276{
2277  tree id;
2278
2279  cp_parser_parse_tentatively (parser);
2280  id = cp_parser_id_expression (parser,
2281				/*template_keyword_p=*/false,
2282				/*check_dependency_p=*/true,
2283				/*template_p=*/NULL,
2284				/*declarator_p=*/true,
2285				/*optional_p=*/false);
2286  /* After the id-expression, there should be a plain identifier,
2287     otherwise this is not a simple variable declaration. Also, if
2288     the scope is dependent, we cannot do much.  */
2289  if (!cp_lexer_next_token_is (parser->lexer, CPP_NAME)
2290      || (parser->scope && TYPE_P (parser->scope)
2291	  && dependent_type_p (parser->scope))
2292      || TREE_CODE (id) == TYPE_DECL)
2293    {
2294      cp_parser_abort_tentative_parse (parser);
2295      return false;
2296    }
2297  if (!cp_parser_parse_definitely (parser))
2298    return false;
2299
2300  /* Emit a diagnostic for the invalid type.  */
2301  cp_parser_diagnose_invalid_type_name (parser, parser->scope, id);
2302  /* Skip to the end of the declaration; there's no point in
2303     trying to process it.  */
2304  cp_parser_skip_to_end_of_block_or_statement (parser);
2305  return true;
2306}
2307
2308/* Consume tokens up to, and including, the next non-nested closing `)'.
2309   Returns 1 iff we found a closing `)'.  RECOVERING is true, if we
2310   are doing error recovery. Returns -1 if OR_COMMA is true and we
2311   found an unnested comma.  */
2312
2313static int
2314cp_parser_skip_to_closing_parenthesis (cp_parser *parser,
2315				       bool recovering,
2316				       bool or_comma,
2317				       bool consume_paren)
2318{
2319  unsigned paren_depth = 0;
2320  unsigned brace_depth = 0;
2321
2322  if (recovering && !or_comma
2323      && cp_parser_uncommitted_to_tentative_parse_p (parser))
2324    return 0;
2325
2326  while (true)
2327    {
2328      cp_token * token = cp_lexer_peek_token (parser->lexer);
2329
2330      switch (token->type)
2331	{
2332	case CPP_EOF:
2333	case CPP_PRAGMA_EOL:
2334	  /* If we've run out of tokens, then there is no closing `)'.  */
2335	  return 0;
2336
2337	case CPP_SEMICOLON:
2338	  /* This matches the processing in skip_to_end_of_statement.  */
2339	  if (!brace_depth)
2340	    return 0;
2341	  break;
2342
2343	case CPP_OPEN_BRACE:
2344	  ++brace_depth;
2345	  break;
2346	case CPP_CLOSE_BRACE:
2347	  if (!brace_depth--)
2348	    return 0;
2349	  break;
2350
2351	case CPP_COMMA:
2352	  if (recovering && or_comma && !brace_depth && !paren_depth)
2353	    return -1;
2354	  break;
2355
2356	case CPP_OPEN_PAREN:
2357	  if (!brace_depth)
2358	    ++paren_depth;
2359	  break;
2360
2361	case CPP_CLOSE_PAREN:
2362	  if (!brace_depth && !paren_depth--)
2363	    {
2364	      if (consume_paren)
2365		cp_lexer_consume_token (parser->lexer);
2366	      return 1;
2367	    }
2368	  break;
2369
2370	default:
2371	  break;
2372	}
2373
2374      /* Consume the token.  */
2375      cp_lexer_consume_token (parser->lexer);
2376    }
2377}
2378
2379/* Consume tokens until we reach the end of the current statement.
2380   Normally, that will be just before consuming a `;'.  However, if a
2381   non-nested `}' comes first, then we stop before consuming that.  */
2382
2383static void
2384cp_parser_skip_to_end_of_statement (cp_parser* parser)
2385{
2386  unsigned nesting_depth = 0;
2387
2388  while (true)
2389    {
2390      cp_token *token = cp_lexer_peek_token (parser->lexer);
2391
2392      switch (token->type)
2393	{
2394	case CPP_EOF:
2395	case CPP_PRAGMA_EOL:
2396	  /* If we've run out of tokens, stop.  */
2397	  return;
2398
2399	case CPP_SEMICOLON:
2400	  /* If the next token is a `;', we have reached the end of the
2401	     statement.  */
2402	  if (!nesting_depth)
2403	    return;
2404	  break;
2405
2406	case CPP_CLOSE_BRACE:
2407	  /* If this is a non-nested '}', stop before consuming it.
2408	     That way, when confronted with something like:
2409
2410	       { 3 + }
2411
2412	     we stop before consuming the closing '}', even though we
2413	     have not yet reached a `;'.  */
2414	  if (nesting_depth == 0)
2415	    return;
2416
2417	  /* If it is the closing '}' for a block that we have
2418	     scanned, stop -- but only after consuming the token.
2419	     That way given:
2420
2421		void f g () { ... }
2422		typedef int I;
2423
2424	     we will stop after the body of the erroneously declared
2425	     function, but before consuming the following `typedef'
2426	     declaration.  */
2427	  if (--nesting_depth == 0)
2428	    {
2429	      cp_lexer_consume_token (parser->lexer);
2430	      return;
2431	    }
2432
2433	case CPP_OPEN_BRACE:
2434	  ++nesting_depth;
2435	  break;
2436
2437	default:
2438	  break;
2439	}
2440
2441      /* Consume the token.  */
2442      cp_lexer_consume_token (parser->lexer);
2443    }
2444}
2445
2446/* This function is called at the end of a statement or declaration.
2447   If the next token is a semicolon, it is consumed; otherwise, error
2448   recovery is attempted.  */
2449
2450static void
2451cp_parser_consume_semicolon_at_end_of_statement (cp_parser *parser)
2452{
2453  /* Look for the trailing `;'.  */
2454  if (!cp_parser_require (parser, CPP_SEMICOLON, "`;'"))
2455    {
2456      /* If there is additional (erroneous) input, skip to the end of
2457	 the statement.  */
2458      cp_parser_skip_to_end_of_statement (parser);
2459      /* If the next token is now a `;', consume it.  */
2460      if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
2461	cp_lexer_consume_token (parser->lexer);
2462    }
2463}
2464
2465/* Skip tokens until we have consumed an entire block, or until we
2466   have consumed a non-nested `;'.  */
2467
2468static void
2469cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
2470{
2471  int nesting_depth = 0;
2472
2473  while (nesting_depth >= 0)
2474    {
2475      cp_token *token = cp_lexer_peek_token (parser->lexer);
2476
2477      switch (token->type)
2478	{
2479	case CPP_EOF:
2480	case CPP_PRAGMA_EOL:
2481	  /* If we've run out of tokens, stop.  */
2482	  return;
2483
2484	case CPP_SEMICOLON:
2485	  /* Stop if this is an unnested ';'. */
2486	  if (!nesting_depth)
2487	    nesting_depth = -1;
2488	  break;
2489
2490	case CPP_CLOSE_BRACE:
2491	  /* Stop if this is an unnested '}', or closes the outermost
2492	     nesting level.  */
2493	  nesting_depth--;
2494	  if (!nesting_depth)
2495	    nesting_depth = -1;
2496	  break;
2497
2498	case CPP_OPEN_BRACE:
2499	  /* Nest. */
2500	  nesting_depth++;
2501	  break;
2502
2503	default:
2504	  break;
2505	}
2506
2507      /* Consume the token.  */
2508      cp_lexer_consume_token (parser->lexer);
2509    }
2510}
2511
2512/* Skip tokens until a non-nested closing curly brace is the next
2513   token.  */
2514
2515static void
2516cp_parser_skip_to_closing_brace (cp_parser *parser)
2517{
2518  unsigned nesting_depth = 0;
2519
2520  while (true)
2521    {
2522      cp_token *token = cp_lexer_peek_token (parser->lexer);
2523
2524      switch (token->type)
2525	{
2526	case CPP_EOF:
2527	case CPP_PRAGMA_EOL:
2528	  /* If we've run out of tokens, stop.  */
2529	  return;
2530
2531	case CPP_CLOSE_BRACE:
2532	  /* If the next token is a non-nested `}', then we have reached
2533	     the end of the current block.  */
2534	  if (nesting_depth-- == 0)
2535	    return;
2536	  break;
2537
2538	case CPP_OPEN_BRACE:
2539	  /* If it the next token is a `{', then we are entering a new
2540	     block.  Consume the entire block.  */
2541	  ++nesting_depth;
2542	  break;
2543
2544	default:
2545	  break;
2546	}
2547
2548      /* Consume the token.  */
2549      cp_lexer_consume_token (parser->lexer);
2550    }
2551}
2552
2553/* Consume tokens until we reach the end of the pragma.  The PRAGMA_TOK
2554   parameter is the PRAGMA token, allowing us to purge the entire pragma
2555   sequence.  */
2556
2557static void
2558cp_parser_skip_to_pragma_eol (cp_parser* parser, cp_token *pragma_tok)
2559{
2560  cp_token *token;
2561
2562  parser->lexer->in_pragma = false;
2563
2564  do
2565    token = cp_lexer_consume_token (parser->lexer);
2566  while (token->type != CPP_PRAGMA_EOL && token->type != CPP_EOF);
2567
2568  /* Ensure that the pragma is not parsed again.  */
2569  cp_lexer_purge_tokens_after (parser->lexer, pragma_tok);
2570}
2571
2572/* Require pragma end of line, resyncing with it as necessary.  The
2573   arguments are as for cp_parser_skip_to_pragma_eol.  */
2574
2575static void
2576cp_parser_require_pragma_eol (cp_parser *parser, cp_token *pragma_tok)
2577{
2578  parser->lexer->in_pragma = false;
2579  if (!cp_parser_require (parser, CPP_PRAGMA_EOL, "end of line"))
2580    cp_parser_skip_to_pragma_eol (parser, pragma_tok);
2581}
2582
2583/* This is a simple wrapper around make_typename_type. When the id is
2584   an unresolved identifier node, we can provide a superior diagnostic
2585   using cp_parser_diagnose_invalid_type_name.  */
2586
2587static tree
2588cp_parser_make_typename_type (cp_parser *parser, tree scope, tree id)
2589{
2590  tree result;
2591  if (TREE_CODE (id) == IDENTIFIER_NODE)
2592    {
2593      result = make_typename_type (scope, id, typename_type,
2594				   /*complain=*/tf_none);
2595      if (result == error_mark_node)
2596	cp_parser_diagnose_invalid_type_name (parser, scope, id);
2597      return result;
2598    }
2599  return make_typename_type (scope, id, typename_type, tf_error);
2600}
2601
2602
2603/* Create a new C++ parser.  */
2604
2605static cp_parser *
2606cp_parser_new (void)
2607{
2608  cp_parser *parser;
2609  cp_lexer *lexer;
2610  unsigned i;
2611
2612  /* cp_lexer_new_main is called before calling ggc_alloc because
2613     cp_lexer_new_main might load a PCH file.  */
2614  lexer = cp_lexer_new_main ();
2615
2616  /* Initialize the binops_by_token so that we can get the tree
2617     directly from the token.  */
2618  for (i = 0; i < sizeof (binops) / sizeof (binops[0]); i++)
2619    binops_by_token[binops[i].token_type] = binops[i];
2620
2621  parser = GGC_CNEW (cp_parser);
2622  parser->lexer = lexer;
2623  parser->context = cp_parser_context_new (NULL);
2624
2625  /* For now, we always accept GNU extensions.  */
2626  parser->allow_gnu_extensions_p = 1;
2627
2628  /* The `>' token is a greater-than operator, not the end of a
2629     template-id.  */
2630  parser->greater_than_is_operator_p = true;
2631
2632  parser->default_arg_ok_p = true;
2633
2634  /* We are not parsing a constant-expression.  */
2635  parser->integral_constant_expression_p = false;
2636  parser->allow_non_integral_constant_expression_p = false;
2637  parser->non_integral_constant_expression_p = false;
2638
2639  /* Local variable names are not forbidden.  */
2640  parser->local_variables_forbidden_p = false;
2641
2642  /* We are not processing an `extern "C"' declaration.  */
2643  parser->in_unbraced_linkage_specification_p = false;
2644
2645  /* We are not processing a declarator.  */
2646  parser->in_declarator_p = false;
2647
2648  /* We are not processing a template-argument-list.  */
2649  parser->in_template_argument_list_p = false;
2650
2651  /* We are not in an iteration statement.  */
2652  parser->in_statement = 0;
2653
2654  /* We are not in a switch statement.  */
2655  parser->in_switch_statement_p = false;
2656
2657  /* We are not parsing a type-id inside an expression.  */
2658  parser->in_type_id_in_expr_p = false;
2659
2660  /* Declarations aren't implicitly extern "C".  */
2661  parser->implicit_extern_c = false;
2662
2663  /* String literals should be translated to the execution character set.  */
2664  parser->translate_strings_p = true;
2665
2666  /* We are not parsing a function body.  */
2667  parser->in_function_body = false;
2668
2669  /* The unparsed function queue is empty.  */
2670  parser->unparsed_functions_queues = build_tree_list (NULL_TREE, NULL_TREE);
2671
2672  /* There are no classes being defined.  */
2673  parser->num_classes_being_defined = 0;
2674
2675  /* No template parameters apply.  */
2676  parser->num_template_parameter_lists = 0;
2677
2678  return parser;
2679}
2680
2681/* Create a cp_lexer structure which will emit the tokens in CACHE
2682   and push it onto the parser's lexer stack.  This is used for delayed
2683   parsing of in-class method bodies and default arguments, and should
2684   not be confused with tentative parsing.  */
2685static void
2686cp_parser_push_lexer_for_tokens (cp_parser *parser, cp_token_cache *cache)
2687{
2688  cp_lexer *lexer = cp_lexer_new_from_tokens (cache);
2689  lexer->next = parser->lexer;
2690  parser->lexer = lexer;
2691
2692  /* Move the current source position to that of the first token in the
2693     new lexer.  */
2694  cp_lexer_set_source_position_from_token (lexer->next_token);
2695}
2696
2697/* Pop the top lexer off the parser stack.  This is never used for the
2698   "main" lexer, only for those pushed by cp_parser_push_lexer_for_tokens.  */
2699static void
2700cp_parser_pop_lexer (cp_parser *parser)
2701{
2702  cp_lexer *lexer = parser->lexer;
2703  parser->lexer = lexer->next;
2704  cp_lexer_destroy (lexer);
2705
2706  /* Put the current source position back where it was before this
2707     lexer was pushed.  */
2708  cp_lexer_set_source_position_from_token (parser->lexer->next_token);
2709}
2710
2711/* Lexical conventions [gram.lex]  */
2712
2713/* Parse an identifier.  Returns an IDENTIFIER_NODE representing the
2714   identifier.  */
2715
2716static tree
2717cp_parser_identifier (cp_parser* parser)
2718{
2719  cp_token *token;
2720
2721  /* Look for the identifier.  */
2722  token = cp_parser_require (parser, CPP_NAME, "identifier");
2723  /* Return the value.  */
2724  return token ? token->u.value : error_mark_node;
2725}
2726
2727/* Parse a sequence of adjacent string constants.  Returns a
2728   TREE_STRING representing the combined, nul-terminated string
2729   constant.  If TRANSLATE is true, translate the string to the
2730   execution character set.  If WIDE_OK is true, a wide string is
2731   invalid here.
2732
2733   C++98 [lex.string] says that if a narrow string literal token is
2734   adjacent to a wide string literal token, the behavior is undefined.
2735   However, C99 6.4.5p4 says that this results in a wide string literal.
2736   We follow C99 here, for consistency with the C front end.
2737
2738   This code is largely lifted from lex_string() in c-lex.c.
2739
2740   FUTURE: ObjC++ will need to handle @-strings here.  */
2741static tree
2742cp_parser_string_literal (cp_parser *parser, bool translate, bool wide_ok)
2743{
2744  tree value;
2745  bool wide = false;
2746  size_t count;
2747  struct obstack str_ob;
2748  cpp_string str, istr, *strs;
2749  cp_token *tok;
2750
2751  tok = cp_lexer_peek_token (parser->lexer);
2752  if (!cp_parser_is_string_literal (tok))
2753    {
2754      cp_parser_error (parser, "expected string-literal");
2755      return error_mark_node;
2756    }
2757
2758  /* Try to avoid the overhead of creating and destroying an obstack
2759     for the common case of just one string.  */
2760  if (!cp_parser_is_string_literal
2761      (cp_lexer_peek_nth_token (parser->lexer, 2)))
2762    {
2763      cp_lexer_consume_token (parser->lexer);
2764
2765      str.text = (const unsigned char *)TREE_STRING_POINTER (tok->u.value);
2766      str.len = TREE_STRING_LENGTH (tok->u.value);
2767      count = 1;
2768      if (tok->type == CPP_WSTRING)
2769	wide = true;
2770
2771      strs = &str;
2772    }
2773  else
2774    {
2775      gcc_obstack_init (&str_ob);
2776      count = 0;
2777
2778      do
2779	{
2780	  cp_lexer_consume_token (parser->lexer);
2781	  count++;
2782	  str.text = (unsigned char *)TREE_STRING_POINTER (tok->u.value);
2783	  str.len = TREE_STRING_LENGTH (tok->u.value);
2784	  if (tok->type == CPP_WSTRING)
2785	    wide = true;
2786
2787	  obstack_grow (&str_ob, &str, sizeof (cpp_string));
2788
2789	  tok = cp_lexer_peek_token (parser->lexer);
2790	}
2791      while (cp_parser_is_string_literal (tok));
2792
2793      strs = (cpp_string *) obstack_finish (&str_ob);
2794    }
2795
2796  if (wide && !wide_ok)
2797    {
2798      cp_parser_error (parser, "a wide string is invalid in this context");
2799      wide = false;
2800    }
2801
2802  if ((translate ? cpp_interpret_string : cpp_interpret_string_notranslate)
2803      (parse_in, strs, count, &istr, wide))
2804    {
2805      value = build_string (istr.len, (char *)istr.text);
2806      free ((void *)istr.text);
2807
2808      TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
2809      value = fix_string_type (value);
2810    }
2811  else
2812    /* cpp_interpret_string has issued an error.  */
2813    value = error_mark_node;
2814
2815  if (count > 1)
2816    obstack_free (&str_ob, 0);
2817
2818  return value;
2819}
2820
2821
2822/* Basic concepts [gram.basic]  */
2823
2824/* Parse a translation-unit.
2825
2826   translation-unit:
2827     declaration-seq [opt]
2828
2829   Returns TRUE if all went well.  */
2830
2831static bool
2832cp_parser_translation_unit (cp_parser* parser)
2833{
2834  /* The address of the first non-permanent object on the declarator
2835     obstack.  */
2836  static void *declarator_obstack_base;
2837
2838  bool success;
2839
2840  /* Create the declarator obstack, if necessary.  */
2841  if (!cp_error_declarator)
2842    {
2843      gcc_obstack_init (&declarator_obstack);
2844      /* Create the error declarator.  */
2845      cp_error_declarator = make_declarator (cdk_error);
2846      /* Create the empty parameter list.  */
2847      no_parameters = make_parameter_declarator (NULL, NULL, NULL_TREE);
2848      /* Remember where the base of the declarator obstack lies.  */
2849      declarator_obstack_base = obstack_next_free (&declarator_obstack);
2850    }
2851
2852  cp_parser_declaration_seq_opt (parser);
2853
2854  /* If there are no tokens left then all went well.  */
2855  if (cp_lexer_next_token_is (parser->lexer, CPP_EOF))
2856    {
2857      /* Get rid of the token array; we don't need it any more.  */
2858      cp_lexer_destroy (parser->lexer);
2859      parser->lexer = NULL;
2860
2861      /* This file might have been a context that's implicitly extern
2862	 "C".  If so, pop the lang context.  (Only relevant for PCH.) */
2863      if (parser->implicit_extern_c)
2864	{
2865	  pop_lang_context ();
2866	  parser->implicit_extern_c = false;
2867	}
2868
2869      /* Finish up.  */
2870      finish_translation_unit ();
2871
2872      success = true;
2873    }
2874  else
2875    {
2876      cp_parser_error (parser, "expected declaration");
2877      success = false;
2878    }
2879
2880  /* Make sure the declarator obstack was fully cleaned up.  */
2881  gcc_assert (obstack_next_free (&declarator_obstack)
2882	      == declarator_obstack_base);
2883
2884  /* All went well.  */
2885  return success;
2886}
2887
2888/* Expressions [gram.expr] */
2889
2890/* Parse a primary-expression.
2891
2892   primary-expression:
2893     literal
2894     this
2895     ( expression )
2896     id-expression
2897
2898   GNU Extensions:
2899
2900   primary-expression:
2901     ( compound-statement )
2902     __builtin_va_arg ( assignment-expression , type-id )
2903     __builtin_offsetof ( type-id , offsetof-expression )
2904
2905   Objective-C++ Extension:
2906
2907   primary-expression:
2908     objc-expression
2909
2910   literal:
2911     __null
2912
2913   ADDRESS_P is true iff this expression was immediately preceded by
2914   "&" and therefore might denote a pointer-to-member.  CAST_P is true
2915   iff this expression is the target of a cast.  TEMPLATE_ARG_P is
2916   true iff this expression is a template argument.
2917
2918   Returns a representation of the expression.  Upon return, *IDK
2919   indicates what kind of id-expression (if any) was present.  */
2920
2921static tree
2922cp_parser_primary_expression (cp_parser *parser,
2923			      bool address_p,
2924			      bool cast_p,
2925			      bool template_arg_p,
2926			      cp_id_kind *idk)
2927{
2928  cp_token *token;
2929
2930  /* Assume the primary expression is not an id-expression.  */
2931  *idk = CP_ID_KIND_NONE;
2932
2933  /* Peek at the next token.  */
2934  token = cp_lexer_peek_token (parser->lexer);
2935  switch (token->type)
2936    {
2937      /* literal:
2938	   integer-literal
2939	   character-literal
2940	   floating-literal
2941	   string-literal
2942	   boolean-literal  */
2943    case CPP_CHAR:
2944    case CPP_WCHAR:
2945    case CPP_NUMBER:
2946      token = cp_lexer_consume_token (parser->lexer);
2947      /* Floating-point literals are only allowed in an integral
2948	 constant expression if they are cast to an integral or
2949	 enumeration type.  */
2950      if (TREE_CODE (token->u.value) == REAL_CST
2951	  && parser->integral_constant_expression_p
2952	  && pedantic)
2953	{
2954	  /* CAST_P will be set even in invalid code like "int(2.7 +
2955	     ...)".   Therefore, we have to check that the next token
2956	     is sure to end the cast.  */
2957	  if (cast_p)
2958	    {
2959	      cp_token *next_token;
2960
2961	      next_token = cp_lexer_peek_token (parser->lexer);
2962	      if (/* The comma at the end of an
2963		     enumerator-definition.  */
2964		  next_token->type != CPP_COMMA
2965		  /* The curly brace at the end of an enum-specifier.  */
2966		  && next_token->type != CPP_CLOSE_BRACE
2967		  /* The end of a statement.  */
2968		  && next_token->type != CPP_SEMICOLON
2969		  /* The end of the cast-expression.  */
2970		  && next_token->type != CPP_CLOSE_PAREN
2971		  /* The end of an array bound.  */
2972		  && next_token->type != CPP_CLOSE_SQUARE
2973		  /* The closing ">" in a template-argument-list.  */
2974		  && (next_token->type != CPP_GREATER
2975		      || parser->greater_than_is_operator_p))
2976		cast_p = false;
2977	    }
2978
2979	  /* If we are within a cast, then the constraint that the
2980	     cast is to an integral or enumeration type will be
2981	     checked at that point.  If we are not within a cast, then
2982	     this code is invalid.  */
2983	  if (!cast_p)
2984	    cp_parser_non_integral_constant_expression
2985	      (parser, "floating-point literal");
2986	}
2987      return token->u.value;
2988
2989    case CPP_STRING:
2990    case CPP_WSTRING:
2991      /* ??? Should wide strings be allowed when parser->translate_strings_p
2992	 is false (i.e. in attributes)?  If not, we can kill the third
2993	 argument to cp_parser_string_literal.  */
2994      return cp_parser_string_literal (parser,
2995				       parser->translate_strings_p,
2996				       true);
2997
2998    case CPP_OPEN_PAREN:
2999      {
3000	tree expr;
3001	bool saved_greater_than_is_operator_p;
3002
3003	/* Consume the `('.  */
3004	cp_lexer_consume_token (parser->lexer);
3005	/* Within a parenthesized expression, a `>' token is always
3006	   the greater-than operator.  */
3007	saved_greater_than_is_operator_p
3008	  = parser->greater_than_is_operator_p;
3009	parser->greater_than_is_operator_p = true;
3010	/* If we see `( { ' then we are looking at the beginning of
3011	   a GNU statement-expression.  */
3012	if (cp_parser_allow_gnu_extensions_p (parser)
3013	    && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
3014	  {
3015	    /* Statement-expressions are not allowed by the standard.  */
3016	    if (pedantic)
3017	      pedwarn ("ISO C++ forbids braced-groups within expressions");
3018
3019	    /* And they're not allowed outside of a function-body; you
3020	       cannot, for example, write:
3021
3022		 int i = ({ int j = 3; j + 1; });
3023
3024	       at class or namespace scope.  */
3025	    if (!parser->in_function_body)
3026	      error ("statement-expressions are allowed only inside functions");
3027	    /* Start the statement-expression.  */
3028	    expr = begin_stmt_expr ();
3029	    /* Parse the compound-statement.  */
3030	    cp_parser_compound_statement (parser, expr, false);
3031	    /* Finish up.  */
3032	    expr = finish_stmt_expr (expr, false);
3033	  }
3034	else
3035	  {
3036	    /* Parse the parenthesized expression.  */
3037	    expr = cp_parser_expression (parser, cast_p);
3038	    /* Let the front end know that this expression was
3039	       enclosed in parentheses. This matters in case, for
3040	       example, the expression is of the form `A::B', since
3041	       `&A::B' might be a pointer-to-member, but `&(A::B)' is
3042	       not.  */
3043	    finish_parenthesized_expr (expr);
3044	  }
3045	/* The `>' token might be the end of a template-id or
3046	   template-parameter-list now.  */
3047	parser->greater_than_is_operator_p
3048	  = saved_greater_than_is_operator_p;
3049	/* Consume the `)'.  */
3050	if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
3051	  cp_parser_skip_to_end_of_statement (parser);
3052
3053	return expr;
3054      }
3055
3056    case CPP_KEYWORD:
3057      switch (token->keyword)
3058	{
3059	  /* These two are the boolean literals.  */
3060	case RID_TRUE:
3061	  cp_lexer_consume_token (parser->lexer);
3062	  return boolean_true_node;
3063	case RID_FALSE:
3064	  cp_lexer_consume_token (parser->lexer);
3065	  return boolean_false_node;
3066
3067	  /* The `__null' literal.  */
3068	case RID_NULL:
3069	  cp_lexer_consume_token (parser->lexer);
3070	  return null_node;
3071
3072	  /* Recognize the `this' keyword.  */
3073	case RID_THIS:
3074	  cp_lexer_consume_token (parser->lexer);
3075	  if (parser->local_variables_forbidden_p)
3076	    {
3077	      error ("%<this%> may not be used in this context");
3078	      return error_mark_node;
3079	    }
3080	  /* Pointers cannot appear in constant-expressions.  */
3081	  if (cp_parser_non_integral_constant_expression (parser,
3082							  "`this'"))
3083	    return error_mark_node;
3084	  return finish_this_expr ();
3085
3086	  /* The `operator' keyword can be the beginning of an
3087	     id-expression.  */
3088	case RID_OPERATOR:
3089	  goto id_expression;
3090
3091	case RID_FUNCTION_NAME:
3092	case RID_PRETTY_FUNCTION_NAME:
3093	case RID_C99_FUNCTION_NAME:
3094	  /* The symbols __FUNCTION__, __PRETTY_FUNCTION__, and
3095	     __func__ are the names of variables -- but they are
3096	     treated specially.  Therefore, they are handled here,
3097	     rather than relying on the generic id-expression logic
3098	     below.  Grammatically, these names are id-expressions.
3099
3100	     Consume the token.  */
3101	  token = cp_lexer_consume_token (parser->lexer);
3102	  /* Look up the name.  */
3103	  return finish_fname (token->u.value);
3104
3105	case RID_VA_ARG:
3106	  {
3107	    tree expression;
3108	    tree type;
3109
3110	    /* The `__builtin_va_arg' construct is used to handle
3111	       `va_arg'.  Consume the `__builtin_va_arg' token.  */
3112	    cp_lexer_consume_token (parser->lexer);
3113	    /* Look for the opening `('.  */
3114	    cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
3115	    /* Now, parse the assignment-expression.  */
3116	    expression = cp_parser_assignment_expression (parser,
3117							  /*cast_p=*/false);
3118	    /* Look for the `,'.  */
3119	    cp_parser_require (parser, CPP_COMMA, "`,'");
3120	    /* Parse the type-id.  */
3121	    type = cp_parser_type_id (parser);
3122	    /* Look for the closing `)'.  */
3123	    cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
3124	    /* Using `va_arg' in a constant-expression is not
3125	       allowed.  */
3126	    if (cp_parser_non_integral_constant_expression (parser,
3127							    "`va_arg'"))
3128	      return error_mark_node;
3129	    return build_x_va_arg (expression, type);
3130	  }
3131
3132	case RID_OFFSETOF:
3133	  return cp_parser_builtin_offsetof (parser);
3134
3135	  /* Objective-C++ expressions.  */
3136	case RID_AT_ENCODE:
3137	case RID_AT_PROTOCOL:
3138	case RID_AT_SELECTOR:
3139	  return cp_parser_objc_expression (parser);
3140
3141	default:
3142	  cp_parser_error (parser, "expected primary-expression");
3143	  return error_mark_node;
3144	}
3145
3146      /* An id-expression can start with either an identifier, a
3147	 `::' as the beginning of a qualified-id, or the "operator"
3148	 keyword.  */
3149    case CPP_NAME:
3150    case CPP_SCOPE:
3151    case CPP_TEMPLATE_ID:
3152    case CPP_NESTED_NAME_SPECIFIER:
3153      {
3154	tree id_expression;
3155	tree decl;
3156	const char *error_msg;
3157	bool template_p;
3158	bool done;
3159
3160      id_expression:
3161	/* Parse the id-expression.  */
3162	id_expression
3163	  = cp_parser_id_expression (parser,
3164				     /*template_keyword_p=*/false,
3165				     /*check_dependency_p=*/true,
3166				     &template_p,
3167				     /*declarator_p=*/false,
3168				     /*optional_p=*/false);
3169	if (id_expression == error_mark_node)
3170	  return error_mark_node;
3171	token = cp_lexer_peek_token (parser->lexer);
3172	done = (token->type != CPP_OPEN_SQUARE
3173		&& token->type != CPP_OPEN_PAREN
3174		&& token->type != CPP_DOT
3175		&& token->type != CPP_DEREF
3176		&& token->type != CPP_PLUS_PLUS
3177		&& token->type != CPP_MINUS_MINUS);
3178	/* If we have a template-id, then no further lookup is
3179	   required.  If the template-id was for a template-class, we
3180	   will sometimes have a TYPE_DECL at this point.  */
3181	if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR
3182		 || TREE_CODE (id_expression) == TYPE_DECL)
3183	  decl = id_expression;
3184	/* Look up the name.  */
3185	else
3186	  {
3187	    tree ambiguous_decls;
3188
3189	    decl = cp_parser_lookup_name (parser, id_expression,
3190					  none_type,
3191					  template_p,
3192					  /*is_namespace=*/false,
3193					  /*check_dependency=*/true,
3194					  &ambiguous_decls);
3195	    /* If the lookup was ambiguous, an error will already have
3196	       been issued.  */
3197	    if (ambiguous_decls)
3198	      return error_mark_node;
3199
3200	    /* In Objective-C++, an instance variable (ivar) may be preferred
3201	       to whatever cp_parser_lookup_name() found.  */
3202	    decl = objc_lookup_ivar (decl, id_expression);
3203
3204	    /* If name lookup gives us a SCOPE_REF, then the
3205	       qualifying scope was dependent.  */
3206	    if (TREE_CODE (decl) == SCOPE_REF)
3207	      {
3208		/* At this point, we do not know if DECL is a valid
3209		   integral constant expression.  We assume that it is
3210		   in fact such an expression, so that code like:
3211
3212		      template <int N> struct A {
3213			int a[B<N>::i];
3214		      };
3215
3216		   is accepted.  At template-instantiation time, we
3217		   will check that B<N>::i is actually a constant.  */
3218		return decl;
3219	      }
3220	    /* Check to see if DECL is a local variable in a context
3221	       where that is forbidden.  */
3222	    if (parser->local_variables_forbidden_p
3223		&& local_variable_p (decl))
3224	      {
3225		/* It might be that we only found DECL because we are
3226		   trying to be generous with pre-ISO scoping rules.
3227		   For example, consider:
3228
3229		     int i;
3230		     void g() {
3231		       for (int i = 0; i < 10; ++i) {}
3232		       extern void f(int j = i);
3233		     }
3234
3235		   Here, name look up will originally find the out
3236		   of scope `i'.  We need to issue a warning message,
3237		   but then use the global `i'.  */
3238		decl = check_for_out_of_scope_variable (decl);
3239		if (local_variable_p (decl))
3240		  {
3241		    error ("local variable %qD may not appear in this context",
3242			   decl);
3243		    return error_mark_node;
3244		  }
3245	      }
3246	  }
3247
3248	decl = (finish_id_expression
3249		(id_expression, decl, parser->scope,
3250		 idk,
3251		 parser->integral_constant_expression_p,
3252		 parser->allow_non_integral_constant_expression_p,
3253		 &parser->non_integral_constant_expression_p,
3254		 template_p, done, address_p,
3255		 template_arg_p,
3256		 &error_msg));
3257	if (error_msg)
3258	  cp_parser_error (parser, error_msg);
3259	return decl;
3260      }
3261
3262      /* Anything else is an error.  */
3263    default:
3264      /* ...unless we have an Objective-C++ message or string literal, that is.  */
3265      if (c_dialect_objc ()
3266	  && (token->type == CPP_OPEN_SQUARE || token->type == CPP_OBJC_STRING))
3267	return cp_parser_objc_expression (parser);
3268
3269      cp_parser_error (parser, "expected primary-expression");
3270      return error_mark_node;
3271    }
3272}
3273
3274/* Parse an id-expression.
3275
3276   id-expression:
3277     unqualified-id
3278     qualified-id
3279
3280   qualified-id:
3281     :: [opt] nested-name-specifier template [opt] unqualified-id
3282     :: identifier
3283     :: operator-function-id
3284     :: template-id
3285
3286   Return a representation of the unqualified portion of the
3287   identifier.  Sets PARSER->SCOPE to the qualifying scope if there is
3288   a `::' or nested-name-specifier.
3289
3290   Often, if the id-expression was a qualified-id, the caller will
3291   want to make a SCOPE_REF to represent the qualified-id.  This
3292   function does not do this in order to avoid wastefully creating
3293   SCOPE_REFs when they are not required.
3294
3295   If TEMPLATE_KEYWORD_P is true, then we have just seen the
3296   `template' keyword.
3297
3298   If CHECK_DEPENDENCY_P is false, then names are looked up inside
3299   uninstantiated templates.
3300
3301   If *TEMPLATE_P is non-NULL, it is set to true iff the
3302   `template' keyword is used to explicitly indicate that the entity
3303   named is a template.
3304
3305   If DECLARATOR_P is true, the id-expression is appearing as part of
3306   a declarator, rather than as part of an expression.  */
3307
3308static tree
3309cp_parser_id_expression (cp_parser *parser,
3310			 bool template_keyword_p,
3311			 bool check_dependency_p,
3312			 bool *template_p,
3313			 bool declarator_p,
3314			 bool optional_p)
3315{
3316  bool global_scope_p;
3317  bool nested_name_specifier_p;
3318
3319  /* Assume the `template' keyword was not used.  */
3320  if (template_p)
3321    *template_p = template_keyword_p;
3322
3323  /* Look for the optional `::' operator.  */
3324  global_scope_p
3325    = (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false)
3326       != NULL_TREE);
3327  /* Look for the optional nested-name-specifier.  */
3328  nested_name_specifier_p
3329    = (cp_parser_nested_name_specifier_opt (parser,
3330					    /*typename_keyword_p=*/false,
3331					    check_dependency_p,
3332					    /*type_p=*/false,
3333					    declarator_p)
3334       != NULL_TREE);
3335  /* If there is a nested-name-specifier, then we are looking at
3336     the first qualified-id production.  */
3337  if (nested_name_specifier_p)
3338    {
3339      tree saved_scope;
3340      tree saved_object_scope;
3341      tree saved_qualifying_scope;
3342      tree unqualified_id;
3343      bool is_template;
3344
3345      /* See if the next token is the `template' keyword.  */
3346      if (!template_p)
3347	template_p = &is_template;
3348      *template_p = cp_parser_optional_template_keyword (parser);
3349      /* Name lookup we do during the processing of the
3350	 unqualified-id might obliterate SCOPE.  */
3351      saved_scope = parser->scope;
3352      saved_object_scope = parser->object_scope;
3353      saved_qualifying_scope = parser->qualifying_scope;
3354      /* Process the final unqualified-id.  */
3355      unqualified_id = cp_parser_unqualified_id (parser, *template_p,
3356						 check_dependency_p,
3357						 declarator_p,
3358						 /*optional_p=*/false);
3359      /* Restore the SAVED_SCOPE for our caller.  */
3360      parser->scope = saved_scope;
3361      parser->object_scope = saved_object_scope;
3362      parser->qualifying_scope = saved_qualifying_scope;
3363
3364      return unqualified_id;
3365    }
3366  /* Otherwise, if we are in global scope, then we are looking at one
3367     of the other qualified-id productions.  */
3368  else if (global_scope_p)
3369    {
3370      cp_token *token;
3371      tree id;
3372
3373      /* Peek at the next token.  */
3374      token = cp_lexer_peek_token (parser->lexer);
3375
3376      /* If it's an identifier, and the next token is not a "<", then
3377	 we can avoid the template-id case.  This is an optimization
3378	 for this common case.  */
3379      if (token->type == CPP_NAME
3380	  && !cp_parser_nth_token_starts_template_argument_list_p
3381	       (parser, 2))
3382	return cp_parser_identifier (parser);
3383
3384      cp_parser_parse_tentatively (parser);
3385      /* Try a template-id.  */
3386      id = cp_parser_template_id (parser,
3387				  /*template_keyword_p=*/false,
3388				  /*check_dependency_p=*/true,
3389				  declarator_p);
3390      /* If that worked, we're done.  */
3391      if (cp_parser_parse_definitely (parser))
3392	return id;
3393
3394      /* Peek at the next token.  (Changes in the token buffer may
3395	 have invalidated the pointer obtained above.)  */
3396      token = cp_lexer_peek_token (parser->lexer);
3397
3398      switch (token->type)
3399	{
3400	case CPP_NAME:
3401	  return cp_parser_identifier (parser);
3402
3403	case CPP_KEYWORD:
3404	  if (token->keyword == RID_OPERATOR)
3405	    return cp_parser_operator_function_id (parser);
3406	  /* Fall through.  */
3407
3408	default:
3409	  cp_parser_error (parser, "expected id-expression");
3410	  return error_mark_node;
3411	}
3412    }
3413  else
3414    return cp_parser_unqualified_id (parser, template_keyword_p,
3415				     /*check_dependency_p=*/true,
3416				     declarator_p,
3417				     optional_p);
3418}
3419
3420/* Parse an unqualified-id.
3421
3422   unqualified-id:
3423     identifier
3424     operator-function-id
3425     conversion-function-id
3426     ~ class-name
3427     template-id
3428
3429   If TEMPLATE_KEYWORD_P is TRUE, we have just seen the `template'
3430   keyword, in a construct like `A::template ...'.
3431
3432   Returns a representation of unqualified-id.  For the `identifier'
3433   production, an IDENTIFIER_NODE is returned.  For the `~ class-name'
3434   production a BIT_NOT_EXPR is returned; the operand of the
3435   BIT_NOT_EXPR is an IDENTIFIER_NODE for the class-name.  For the
3436   other productions, see the documentation accompanying the
3437   corresponding parsing functions.  If CHECK_DEPENDENCY_P is false,
3438   names are looked up in uninstantiated templates.  If DECLARATOR_P
3439   is true, the unqualified-id is appearing as part of a declarator,
3440   rather than as part of an expression.  */
3441
3442static tree
3443cp_parser_unqualified_id (cp_parser* parser,
3444			  bool template_keyword_p,
3445			  bool check_dependency_p,
3446			  bool declarator_p,
3447			  bool optional_p)
3448{
3449  cp_token *token;
3450
3451  /* Peek at the next token.  */
3452  token = cp_lexer_peek_token (parser->lexer);
3453
3454  switch (token->type)
3455    {
3456    case CPP_NAME:
3457      {
3458	tree id;
3459
3460	/* We don't know yet whether or not this will be a
3461	   template-id.  */
3462	cp_parser_parse_tentatively (parser);
3463	/* Try a template-id.  */
3464	id = cp_parser_template_id (parser, template_keyword_p,
3465				    check_dependency_p,
3466				    declarator_p);
3467	/* If it worked, we're done.  */
3468	if (cp_parser_parse_definitely (parser))
3469	  return id;
3470	/* Otherwise, it's an ordinary identifier.  */
3471	return cp_parser_identifier (parser);
3472      }
3473
3474    case CPP_TEMPLATE_ID:
3475      return cp_parser_template_id (parser, template_keyword_p,
3476				    check_dependency_p,
3477				    declarator_p);
3478
3479    case CPP_COMPL:
3480      {
3481	tree type_decl;
3482	tree qualifying_scope;
3483	tree object_scope;
3484	tree scope;
3485	bool done;
3486
3487	/* Consume the `~' token.  */
3488	cp_lexer_consume_token (parser->lexer);
3489	/* Parse the class-name.  The standard, as written, seems to
3490	   say that:
3491
3492	     template <typename T> struct S { ~S (); };
3493	     template <typename T> S<T>::~S() {}
3494
3495	   is invalid, since `~' must be followed by a class-name, but
3496	   `S<T>' is dependent, and so not known to be a class.
3497	   That's not right; we need to look in uninstantiated
3498	   templates.  A further complication arises from:
3499
3500	     template <typename T> void f(T t) {
3501	       t.T::~T();
3502	     }
3503
3504	   Here, it is not possible to look up `T' in the scope of `T'
3505	   itself.  We must look in both the current scope, and the
3506	   scope of the containing complete expression.
3507
3508	   Yet another issue is:
3509
3510	     struct S {
3511	       int S;
3512	       ~S();
3513	     };
3514
3515	     S::~S() {}
3516
3517	   The standard does not seem to say that the `S' in `~S'
3518	   should refer to the type `S' and not the data member
3519	   `S::S'.  */
3520
3521	/* DR 244 says that we look up the name after the "~" in the
3522	   same scope as we looked up the qualifying name.  That idea
3523	   isn't fully worked out; it's more complicated than that.  */
3524	scope = parser->scope;
3525	object_scope = parser->object_scope;
3526	qualifying_scope = parser->qualifying_scope;
3527
3528	/* Check for invalid scopes.  */
3529	if (scope == error_mark_node)
3530	  {
3531	    if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3532	      cp_lexer_consume_token (parser->lexer);
3533	    return error_mark_node;
3534	  }
3535	if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
3536	  {
3537	    if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3538	      error ("scope %qT before %<~%> is not a class-name", scope);
3539	    cp_parser_simulate_error (parser);
3540	    if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
3541	      cp_lexer_consume_token (parser->lexer);
3542	    return error_mark_node;
3543	  }
3544	gcc_assert (!scope || TYPE_P (scope));
3545
3546	/* If the name is of the form "X::~X" it's OK.  */
3547	token = cp_lexer_peek_token (parser->lexer);
3548	if (scope
3549	    && token->type == CPP_NAME
3550	    && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3551		== CPP_OPEN_PAREN)
3552	    && constructor_name_p (token->u.value, scope))
3553	  {
3554	    cp_lexer_consume_token (parser->lexer);
3555	    return build_nt (BIT_NOT_EXPR, scope);
3556	  }
3557
3558	/* If there was an explicit qualification (S::~T), first look
3559	   in the scope given by the qualification (i.e., S).  */
3560	done = false;
3561	type_decl = NULL_TREE;
3562	if (scope)
3563	  {
3564	    cp_parser_parse_tentatively (parser);
3565	    type_decl = cp_parser_class_name (parser,
3566					      /*typename_keyword_p=*/false,
3567					      /*template_keyword_p=*/false,
3568					      none_type,
3569					      /*check_dependency=*/false,
3570					      /*class_head_p=*/false,
3571					      declarator_p);
3572	    if (cp_parser_parse_definitely (parser))
3573	      done = true;
3574	  }
3575	/* In "N::S::~S", look in "N" as well.  */
3576	if (!done && scope && qualifying_scope)
3577	  {
3578	    cp_parser_parse_tentatively (parser);
3579	    parser->scope = qualifying_scope;
3580	    parser->object_scope = NULL_TREE;
3581	    parser->qualifying_scope = NULL_TREE;
3582	    type_decl
3583	      = cp_parser_class_name (parser,
3584				      /*typename_keyword_p=*/false,
3585				      /*template_keyword_p=*/false,
3586				      none_type,
3587				      /*check_dependency=*/false,
3588				      /*class_head_p=*/false,
3589				      declarator_p);
3590	    if (cp_parser_parse_definitely (parser))
3591	      done = true;
3592	  }
3593	/* In "p->S::~T", look in the scope given by "*p" as well.  */
3594	else if (!done && object_scope)
3595	  {
3596	    cp_parser_parse_tentatively (parser);
3597	    parser->scope = object_scope;
3598	    parser->object_scope = NULL_TREE;
3599	    parser->qualifying_scope = NULL_TREE;
3600	    type_decl
3601	      = cp_parser_class_name (parser,
3602				      /*typename_keyword_p=*/false,
3603				      /*template_keyword_p=*/false,
3604				      none_type,
3605				      /*check_dependency=*/false,
3606				      /*class_head_p=*/false,
3607				      declarator_p);
3608	    if (cp_parser_parse_definitely (parser))
3609	      done = true;
3610	  }
3611	/* Look in the surrounding context.  */
3612	if (!done)
3613	  {
3614	    parser->scope = NULL_TREE;
3615	    parser->object_scope = NULL_TREE;
3616	    parser->qualifying_scope = NULL_TREE;
3617	    type_decl
3618	      = cp_parser_class_name (parser,
3619				      /*typename_keyword_p=*/false,
3620				      /*template_keyword_p=*/false,
3621				      none_type,
3622				      /*check_dependency=*/false,
3623				      /*class_head_p=*/false,
3624				      declarator_p);
3625	  }
3626	/* If an error occurred, assume that the name of the
3627	   destructor is the same as the name of the qualifying
3628	   class.  That allows us to keep parsing after running
3629	   into ill-formed destructor names.  */
3630	if (type_decl == error_mark_node && scope)
3631	  return build_nt (BIT_NOT_EXPR, scope);
3632	else if (type_decl == error_mark_node)
3633	  return error_mark_node;
3634
3635	/* Check that destructor name and scope match.  */
3636	if (declarator_p && scope && !check_dtor_name (scope, type_decl))
3637	  {
3638	    if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
3639	      error ("declaration of %<~%T%> as member of %qT",
3640		     type_decl, scope);
3641	    cp_parser_simulate_error (parser);
3642	    return error_mark_node;
3643	  }
3644
3645	/* [class.dtor]
3646
3647	   A typedef-name that names a class shall not be used as the
3648	   identifier in the declarator for a destructor declaration.  */
3649	if (declarator_p
3650	    && !DECL_IMPLICIT_TYPEDEF_P (type_decl)
3651	    && !DECL_SELF_REFERENCE_P (type_decl)
3652	    && !cp_parser_uncommitted_to_tentative_parse_p (parser))
3653	  error ("typedef-name %qD used as destructor declarator",
3654		 type_decl);
3655
3656	return build_nt (BIT_NOT_EXPR, TREE_TYPE (type_decl));
3657      }
3658
3659    case CPP_KEYWORD:
3660      if (token->keyword == RID_OPERATOR)
3661	{
3662	  tree id;
3663
3664	  /* This could be a template-id, so we try that first.  */
3665	  cp_parser_parse_tentatively (parser);
3666	  /* Try a template-id.  */
3667	  id = cp_parser_template_id (parser, template_keyword_p,
3668				      /*check_dependency_p=*/true,
3669				      declarator_p);
3670	  /* If that worked, we're done.  */
3671	  if (cp_parser_parse_definitely (parser))
3672	    return id;
3673	  /* We still don't know whether we're looking at an
3674	     operator-function-id or a conversion-function-id.  */
3675	  cp_parser_parse_tentatively (parser);
3676	  /* Try an operator-function-id.  */
3677	  id = cp_parser_operator_function_id (parser);
3678	  /* If that didn't work, try a conversion-function-id.  */
3679	  if (!cp_parser_parse_definitely (parser))
3680	    id = cp_parser_conversion_function_id (parser);
3681
3682	  return id;
3683	}
3684      /* Fall through.  */
3685
3686    default:
3687      if (optional_p)
3688	return NULL_TREE;
3689      cp_parser_error (parser, "expected unqualified-id");
3690      return error_mark_node;
3691    }
3692}
3693
3694/* Parse an (optional) nested-name-specifier.
3695
3696   nested-name-specifier:
3697     class-or-namespace-name :: nested-name-specifier [opt]
3698     class-or-namespace-name :: template nested-name-specifier [opt]
3699
3700   PARSER->SCOPE should be set appropriately before this function is
3701   called.  TYPENAME_KEYWORD_P is TRUE if the `typename' keyword is in
3702   effect.  TYPE_P is TRUE if we non-type bindings should be ignored
3703   in name lookups.
3704
3705   Sets PARSER->SCOPE to the class (TYPE) or namespace
3706   (NAMESPACE_DECL) specified by the nested-name-specifier, or leaves
3707   it unchanged if there is no nested-name-specifier.  Returns the new
3708   scope iff there is a nested-name-specifier, or NULL_TREE otherwise.
3709
3710   If IS_DECLARATION is TRUE, the nested-name-specifier is known to be
3711   part of a declaration and/or decl-specifier.  */
3712
3713static tree
3714cp_parser_nested_name_specifier_opt (cp_parser *parser,
3715				     bool typename_keyword_p,
3716				     bool check_dependency_p,
3717				     bool type_p,
3718				     bool is_declaration)
3719{
3720  bool success = false;
3721  cp_token_position start = 0;
3722  cp_token *token;
3723
3724  /* Remember where the nested-name-specifier starts.  */
3725  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3726    {
3727      start = cp_lexer_token_position (parser->lexer, false);
3728      push_deferring_access_checks (dk_deferred);
3729    }
3730
3731  while (true)
3732    {
3733      tree new_scope;
3734      tree old_scope;
3735      tree saved_qualifying_scope;
3736      bool template_keyword_p;
3737
3738      /* Spot cases that cannot be the beginning of a
3739	 nested-name-specifier.  */
3740      token = cp_lexer_peek_token (parser->lexer);
3741
3742      /* If the next token is CPP_NESTED_NAME_SPECIFIER, just process
3743	 the already parsed nested-name-specifier.  */
3744      if (token->type == CPP_NESTED_NAME_SPECIFIER)
3745	{
3746	  /* Grab the nested-name-specifier and continue the loop.  */
3747	  cp_parser_pre_parsed_nested_name_specifier (parser);
3748	  /* If we originally encountered this nested-name-specifier
3749	     with IS_DECLARATION set to false, we will not have
3750	     resolved TYPENAME_TYPEs, so we must do so here.  */
3751	  if (is_declaration
3752	      && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3753	    {
3754	      new_scope = resolve_typename_type (parser->scope,
3755						 /*only_current_p=*/false);
3756	      if (new_scope != error_mark_node)
3757		parser->scope = new_scope;
3758	    }
3759	  success = true;
3760	  continue;
3761	}
3762
3763      /* Spot cases that cannot be the beginning of a
3764	 nested-name-specifier.  On the second and subsequent times
3765	 through the loop, we look for the `template' keyword.  */
3766      if (success && token->keyword == RID_TEMPLATE)
3767	;
3768      /* A template-id can start a nested-name-specifier.  */
3769      else if (token->type == CPP_TEMPLATE_ID)
3770	;
3771      else
3772	{
3773	  /* If the next token is not an identifier, then it is
3774	     definitely not a class-or-namespace-name.  */
3775	  if (token->type != CPP_NAME)
3776	    break;
3777	  /* If the following token is neither a `<' (to begin a
3778	     template-id), nor a `::', then we are not looking at a
3779	     nested-name-specifier.  */
3780	  token = cp_lexer_peek_nth_token (parser->lexer, 2);
3781	  if (token->type != CPP_SCOPE
3782	      && !cp_parser_nth_token_starts_template_argument_list_p
3783		  (parser, 2))
3784	    break;
3785	}
3786
3787      /* The nested-name-specifier is optional, so we parse
3788	 tentatively.  */
3789      cp_parser_parse_tentatively (parser);
3790
3791      /* Look for the optional `template' keyword, if this isn't the
3792	 first time through the loop.  */
3793      if (success)
3794	template_keyword_p = cp_parser_optional_template_keyword (parser);
3795      else
3796	template_keyword_p = false;
3797
3798      /* Save the old scope since the name lookup we are about to do
3799	 might destroy it.  */
3800      old_scope = parser->scope;
3801      saved_qualifying_scope = parser->qualifying_scope;
3802      /* In a declarator-id like "X<T>::I::Y<T>" we must be able to
3803	 look up names in "X<T>::I" in order to determine that "Y" is
3804	 a template.  So, if we have a typename at this point, we make
3805	 an effort to look through it.  */
3806      if (is_declaration
3807	  && !typename_keyword_p
3808	  && parser->scope
3809	  && TREE_CODE (parser->scope) == TYPENAME_TYPE)
3810	parser->scope = resolve_typename_type (parser->scope,
3811					       /*only_current_p=*/false);
3812      /* Parse the qualifying entity.  */
3813      new_scope
3814	= cp_parser_class_or_namespace_name (parser,
3815					     typename_keyword_p,
3816					     template_keyword_p,
3817					     check_dependency_p,
3818					     type_p,
3819					     is_declaration);
3820      /* Look for the `::' token.  */
3821      cp_parser_require (parser, CPP_SCOPE, "`::'");
3822
3823      /* If we found what we wanted, we keep going; otherwise, we're
3824	 done.  */
3825      if (!cp_parser_parse_definitely (parser))
3826	{
3827	  bool error_p = false;
3828
3829	  /* Restore the OLD_SCOPE since it was valid before the
3830	     failed attempt at finding the last
3831	     class-or-namespace-name.  */
3832	  parser->scope = old_scope;
3833	  parser->qualifying_scope = saved_qualifying_scope;
3834	  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
3835	    break;
3836	  /* If the next token is an identifier, and the one after
3837	     that is a `::', then any valid interpretation would have
3838	     found a class-or-namespace-name.  */
3839	  while (cp_lexer_next_token_is (parser->lexer, CPP_NAME)
3840		 && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
3841		     == CPP_SCOPE)
3842		 && (cp_lexer_peek_nth_token (parser->lexer, 3)->type
3843		     != CPP_COMPL))
3844	    {
3845	      token = cp_lexer_consume_token (parser->lexer);
3846	      if (!error_p)
3847		{
3848		  if (!token->ambiguous_p)
3849		    {
3850		      tree decl;
3851		      tree ambiguous_decls;
3852
3853		      decl = cp_parser_lookup_name (parser, token->u.value,
3854						    none_type,
3855						    /*is_template=*/false,
3856						    /*is_namespace=*/false,
3857						    /*check_dependency=*/true,
3858						    &ambiguous_decls);
3859		      if (TREE_CODE (decl) == TEMPLATE_DECL)
3860			error ("%qD used without template parameters", decl);
3861		      else if (ambiguous_decls)
3862			{
3863			  error ("reference to %qD is ambiguous",
3864				 token->u.value);
3865			  print_candidates (ambiguous_decls);
3866			  decl = error_mark_node;
3867			}
3868		      else
3869			cp_parser_name_lookup_error
3870			  (parser, token->u.value, decl,
3871			   "is not a class or namespace");
3872		    }
3873		  parser->scope = error_mark_node;
3874		  error_p = true;
3875		  /* Treat this as a successful nested-name-specifier
3876		     due to:
3877
3878		     [basic.lookup.qual]
3879
3880		     If the name found is not a class-name (clause
3881		     _class_) or namespace-name (_namespace.def_), the
3882		     program is ill-formed.  */
3883		  success = true;
3884		}
3885	      cp_lexer_consume_token (parser->lexer);
3886	    }
3887	  break;
3888	}
3889      /* We've found one valid nested-name-specifier.  */
3890      success = true;
3891      /* Name lookup always gives us a DECL.  */
3892      if (TREE_CODE (new_scope) == TYPE_DECL)
3893	new_scope = TREE_TYPE (new_scope);
3894      /* Uses of "template" must be followed by actual templates.  */
3895      if (template_keyword_p
3896	  && !(CLASS_TYPE_P (new_scope)
3897	       && ((CLASSTYPE_USE_TEMPLATE (new_scope)
3898		    && PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (new_scope)))
3899		   || CLASSTYPE_IS_TEMPLATE (new_scope)))
3900	  && !(TREE_CODE (new_scope) == TYPENAME_TYPE
3901	       && (TREE_CODE (TYPENAME_TYPE_FULLNAME (new_scope))
3902		   == TEMPLATE_ID_EXPR)))
3903	pedwarn (TYPE_P (new_scope)
3904		 ? "%qT is not a template"
3905		 : "%qD is not a template",
3906		 new_scope);
3907      /* If it is a class scope, try to complete it; we are about to
3908	 be looking up names inside the class.  */
3909      if (TYPE_P (new_scope)
3910	  /* Since checking types for dependency can be expensive,
3911	     avoid doing it if the type is already complete.  */
3912	  && !COMPLETE_TYPE_P (new_scope)
3913	  /* Do not try to complete dependent types.  */
3914	  && !dependent_type_p (new_scope))
3915	new_scope = complete_type (new_scope);
3916      /* Make sure we look in the right scope the next time through
3917	 the loop.  */
3918      parser->scope = new_scope;
3919    }
3920
3921  /* If parsing tentatively, replace the sequence of tokens that makes
3922     up the nested-name-specifier with a CPP_NESTED_NAME_SPECIFIER
3923     token.  That way, should we re-parse the token stream, we will
3924     not have to repeat the effort required to do the parse, nor will
3925     we issue duplicate error messages.  */
3926  if (success && start)
3927    {
3928      cp_token *token;
3929
3930      token = cp_lexer_token_at (parser->lexer, start);
3931      /* Reset the contents of the START token.  */
3932      token->type = CPP_NESTED_NAME_SPECIFIER;
3933      /* Retrieve any deferred checks.  Do not pop this access checks yet
3934	 so the memory will not be reclaimed during token replacing below.  */
3935      token->u.tree_check_value = GGC_CNEW (struct tree_check);
3936      token->u.tree_check_value->value = parser->scope;
3937      token->u.tree_check_value->checks = get_deferred_access_checks ();
3938      token->u.tree_check_value->qualifying_scope =
3939	parser->qualifying_scope;
3940      token->keyword = RID_MAX;
3941
3942      /* Purge all subsequent tokens.  */
3943      cp_lexer_purge_tokens_after (parser->lexer, start);
3944    }
3945
3946  if (start)
3947    pop_to_parent_deferring_access_checks ();
3948
3949  return success ? parser->scope : NULL_TREE;
3950}
3951
3952/* Parse a nested-name-specifier.  See
3953   cp_parser_nested_name_specifier_opt for details.  This function
3954   behaves identically, except that it will an issue an error if no
3955   nested-name-specifier is present.  */
3956
3957static tree
3958cp_parser_nested_name_specifier (cp_parser *parser,
3959				 bool typename_keyword_p,
3960				 bool check_dependency_p,
3961				 bool type_p,
3962				 bool is_declaration)
3963{
3964  tree scope;
3965
3966  /* Look for the nested-name-specifier.  */
3967  scope = cp_parser_nested_name_specifier_opt (parser,
3968					       typename_keyword_p,
3969					       check_dependency_p,
3970					       type_p,
3971					       is_declaration);
3972  /* If it was not present, issue an error message.  */
3973  if (!scope)
3974    {
3975      cp_parser_error (parser, "expected nested-name-specifier");
3976      parser->scope = NULL_TREE;
3977    }
3978
3979  return scope;
3980}
3981
3982/* Parse a class-or-namespace-name.
3983
3984   class-or-namespace-name:
3985     class-name
3986     namespace-name
3987
3988   TYPENAME_KEYWORD_P is TRUE iff the `typename' keyword is in effect.
3989   TEMPLATE_KEYWORD_P is TRUE iff the `template' keyword is in effect.
3990   CHECK_DEPENDENCY_P is FALSE iff dependent names should be looked up.
3991   TYPE_P is TRUE iff the next name should be taken as a class-name,
3992   even the same name is declared to be another entity in the same
3993   scope.
3994
3995   Returns the class (TYPE_DECL) or namespace (NAMESPACE_DECL)
3996   specified by the class-or-namespace-name.  If neither is found the
3997   ERROR_MARK_NODE is returned.  */
3998
3999static tree
4000cp_parser_class_or_namespace_name (cp_parser *parser,
4001				   bool typename_keyword_p,
4002				   bool template_keyword_p,
4003				   bool check_dependency_p,
4004				   bool type_p,
4005				   bool is_declaration)
4006{
4007  tree saved_scope;
4008  tree saved_qualifying_scope;
4009  tree saved_object_scope;
4010  tree scope;
4011  bool only_class_p;
4012
4013  /* Before we try to parse the class-name, we must save away the
4014     current PARSER->SCOPE since cp_parser_class_name will destroy
4015     it.  */
4016  saved_scope = parser->scope;
4017  saved_qualifying_scope = parser->qualifying_scope;
4018  saved_object_scope = parser->object_scope;
4019  /* Try for a class-name first.  If the SAVED_SCOPE is a type, then
4020     there is no need to look for a namespace-name.  */
4021  only_class_p = template_keyword_p || (saved_scope && TYPE_P (saved_scope));
4022  if (!only_class_p)
4023    cp_parser_parse_tentatively (parser);
4024  scope = cp_parser_class_name (parser,
4025				typename_keyword_p,
4026				template_keyword_p,
4027				type_p ? class_type : none_type,
4028				check_dependency_p,
4029				/*class_head_p=*/false,
4030				is_declaration);
4031  /* If that didn't work, try for a namespace-name.  */
4032  if (!only_class_p && !cp_parser_parse_definitely (parser))
4033    {
4034      /* Restore the saved scope.  */
4035      parser->scope = saved_scope;
4036      parser->qualifying_scope = saved_qualifying_scope;
4037      parser->object_scope = saved_object_scope;
4038      /* If we are not looking at an identifier followed by the scope
4039	 resolution operator, then this is not part of a
4040	 nested-name-specifier.  (Note that this function is only used
4041	 to parse the components of a nested-name-specifier.)  */
4042      if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)
4043	  || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_SCOPE)
4044	return error_mark_node;
4045      scope = cp_parser_namespace_name (parser);
4046    }
4047
4048  return scope;
4049}
4050
4051/* Parse a postfix-expression.
4052
4053   postfix-expression:
4054     primary-expression
4055     postfix-expression [ expression ]
4056     postfix-expression ( expression-list [opt] )
4057     simple-type-specifier ( expression-list [opt] )
4058     typename :: [opt] nested-name-specifier identifier
4059       ( expression-list [opt] )
4060     typename :: [opt] nested-name-specifier template [opt] template-id
4061       ( expression-list [opt] )
4062     postfix-expression . template [opt] id-expression
4063     postfix-expression -> template [opt] id-expression
4064     postfix-expression . pseudo-destructor-name
4065     postfix-expression -> pseudo-destructor-name
4066     postfix-expression ++
4067     postfix-expression --
4068     dynamic_cast < type-id > ( expression )
4069     static_cast < type-id > ( expression )
4070     reinterpret_cast < type-id > ( expression )
4071     const_cast < type-id > ( expression )
4072     typeid ( expression )
4073     typeid ( type-id )
4074
4075   GNU Extension:
4076
4077   postfix-expression:
4078     ( type-id ) { initializer-list , [opt] }
4079
4080   This extension is a GNU version of the C99 compound-literal
4081   construct.  (The C99 grammar uses `type-name' instead of `type-id',
4082   but they are essentially the same concept.)
4083
4084   If ADDRESS_P is true, the postfix expression is the operand of the
4085   `&' operator.  CAST_P is true if this expression is the target of a
4086   cast.
4087
4088   Returns a representation of the expression.  */
4089
4090static tree
4091cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p)
4092{
4093  cp_token *token;
4094  enum rid keyword;
4095  cp_id_kind idk = CP_ID_KIND_NONE;
4096  tree postfix_expression = NULL_TREE;
4097
4098  /* Peek at the next token.  */
4099  token = cp_lexer_peek_token (parser->lexer);
4100  /* Some of the productions are determined by keywords.  */
4101  keyword = token->keyword;
4102  switch (keyword)
4103    {
4104    case RID_DYNCAST:
4105    case RID_STATCAST:
4106    case RID_REINTCAST:
4107    case RID_CONSTCAST:
4108      {
4109	tree type;
4110	tree expression;
4111	const char *saved_message;
4112
4113	/* All of these can be handled in the same way from the point
4114	   of view of parsing.  Begin by consuming the token
4115	   identifying the cast.  */
4116	cp_lexer_consume_token (parser->lexer);
4117
4118	/* New types cannot be defined in the cast.  */
4119	saved_message = parser->type_definition_forbidden_message;
4120	parser->type_definition_forbidden_message
4121	  = "types may not be defined in casts";
4122
4123	/* Look for the opening `<'.  */
4124	cp_parser_require (parser, CPP_LESS, "`<'");
4125	/* Parse the type to which we are casting.  */
4126	type = cp_parser_type_id (parser);
4127	/* Look for the closing `>'.  */
4128	cp_parser_require (parser, CPP_GREATER, "`>'");
4129	/* Restore the old message.  */
4130	parser->type_definition_forbidden_message = saved_message;
4131
4132	/* And the expression which is being cast.  */
4133	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4134	expression = cp_parser_expression (parser, /*cast_p=*/true);
4135	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4136
4137	/* Only type conversions to integral or enumeration types
4138	   can be used in constant-expressions.  */
4139	if (!cast_valid_in_integral_constant_expression_p (type)
4140	    && (cp_parser_non_integral_constant_expression
4141		(parser,
4142		 "a cast to a type other than an integral or "
4143		 "enumeration type")))
4144	  return error_mark_node;
4145
4146	switch (keyword)
4147	  {
4148	  case RID_DYNCAST:
4149	    postfix_expression
4150	      = build_dynamic_cast (type, expression);
4151	    break;
4152	  case RID_STATCAST:
4153	    postfix_expression
4154	      = build_static_cast (type, expression);
4155	    break;
4156	  case RID_REINTCAST:
4157	    postfix_expression
4158	      = build_reinterpret_cast (type, expression);
4159	    break;
4160	  case RID_CONSTCAST:
4161	    postfix_expression
4162	      = build_const_cast (type, expression);
4163	    break;
4164	  default:
4165	    gcc_unreachable ();
4166	  }
4167      }
4168      break;
4169
4170    case RID_TYPEID:
4171      {
4172	tree type;
4173	const char *saved_message;
4174	bool saved_in_type_id_in_expr_p;
4175
4176	/* Consume the `typeid' token.  */
4177	cp_lexer_consume_token (parser->lexer);
4178	/* Look for the `(' token.  */
4179	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
4180	/* Types cannot be defined in a `typeid' expression.  */
4181	saved_message = parser->type_definition_forbidden_message;
4182	parser->type_definition_forbidden_message
4183	  = "types may not be defined in a `typeid\' expression";
4184	/* We can't be sure yet whether we're looking at a type-id or an
4185	   expression.  */
4186	cp_parser_parse_tentatively (parser);
4187	/* Try a type-id first.  */
4188	saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4189	parser->in_type_id_in_expr_p = true;
4190	type = cp_parser_type_id (parser);
4191	parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4192	/* Look for the `)' token.  Otherwise, we can't be sure that
4193	   we're not looking at an expression: consider `typeid (int
4194	   (3))', for example.  */
4195	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4196	/* If all went well, simply lookup the type-id.  */
4197	if (cp_parser_parse_definitely (parser))
4198	  postfix_expression = get_typeid (type);
4199	/* Otherwise, fall back to the expression variant.  */
4200	else
4201	  {
4202	    tree expression;
4203
4204	    /* Look for an expression.  */
4205	    expression = cp_parser_expression (parser, /*cast_p=*/false);
4206	    /* Compute its typeid.  */
4207	    postfix_expression = build_typeid (expression);
4208	    /* Look for the `)' token.  */
4209	    cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4210	  }
4211	/* Restore the saved message.  */
4212	parser->type_definition_forbidden_message = saved_message;
4213	/* `typeid' may not appear in an integral constant expression.  */
4214	if (cp_parser_non_integral_constant_expression(parser,
4215						       "`typeid' operator"))
4216	  return error_mark_node;
4217      }
4218      break;
4219
4220    case RID_TYPENAME:
4221      {
4222	tree type;
4223	/* The syntax permitted here is the same permitted for an
4224	   elaborated-type-specifier.  */
4225	type = cp_parser_elaborated_type_specifier (parser,
4226						    /*is_friend=*/false,
4227						    /*is_declaration=*/false);
4228	postfix_expression = cp_parser_functional_cast (parser, type);
4229      }
4230      break;
4231
4232    default:
4233      {
4234	tree type;
4235
4236	/* If the next thing is a simple-type-specifier, we may be
4237	   looking at a functional cast.  We could also be looking at
4238	   an id-expression.  So, we try the functional cast, and if
4239	   that doesn't work we fall back to the primary-expression.  */
4240	cp_parser_parse_tentatively (parser);
4241	/* Look for the simple-type-specifier.  */
4242	type = cp_parser_simple_type_specifier (parser,
4243						/*decl_specs=*/NULL,
4244						CP_PARSER_FLAGS_NONE);
4245	/* Parse the cast itself.  */
4246	if (!cp_parser_error_occurred (parser))
4247	  postfix_expression
4248	    = cp_parser_functional_cast (parser, type);
4249	/* If that worked, we're done.  */
4250	if (cp_parser_parse_definitely (parser))
4251	  break;
4252
4253	/* If the functional-cast didn't work out, try a
4254	   compound-literal.  */
4255	if (cp_parser_allow_gnu_extensions_p (parser)
4256	    && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
4257	  {
4258	    VEC(constructor_elt,gc) *initializer_list = NULL;
4259	    bool saved_in_type_id_in_expr_p;
4260
4261	    cp_parser_parse_tentatively (parser);
4262	    /* Consume the `('.  */
4263	    cp_lexer_consume_token (parser->lexer);
4264	    /* Parse the type.  */
4265	    saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
4266	    parser->in_type_id_in_expr_p = true;
4267	    type = cp_parser_type_id (parser);
4268	    parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
4269	    /* Look for the `)'.  */
4270	    cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
4271	    /* Look for the `{'.  */
4272	    cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
4273	    /* If things aren't going well, there's no need to
4274	       keep going.  */
4275	    if (!cp_parser_error_occurred (parser))
4276	      {
4277		bool non_constant_p;
4278		/* Parse the initializer-list.  */
4279		initializer_list
4280		  = cp_parser_initializer_list (parser, &non_constant_p);
4281		/* Allow a trailing `,'.  */
4282		if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
4283		  cp_lexer_consume_token (parser->lexer);
4284		/* Look for the final `}'.  */
4285		cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
4286	      }
4287	    /* If that worked, we're definitely looking at a
4288	       compound-literal expression.  */
4289	    if (cp_parser_parse_definitely (parser))
4290	      {
4291		/* Warn the user that a compound literal is not
4292		   allowed in standard C++.  */
4293		if (pedantic)
4294		  pedwarn ("ISO C++ forbids compound-literals");
4295		/* For simplicitly, we disallow compound literals in
4296		   constant-expressions for simpliicitly.  We could
4297		   allow compound literals of integer type, whose
4298		   initializer was a constant, in constant
4299		   expressions.  Permitting that usage, as a further
4300		   extension, would not change the meaning of any
4301		   currently accepted programs.  (Of course, as
4302		   compound literals are not part of ISO C++, the
4303		   standard has nothing to say.)  */
4304		if (cp_parser_non_integral_constant_expression
4305		    (parser, "non-constant compound literals"))
4306		  {
4307		    postfix_expression = error_mark_node;
4308		    break;
4309		  }
4310		/* Form the representation of the compound-literal.  */
4311		postfix_expression
4312		  = finish_compound_literal (type, initializer_list);
4313		break;
4314	      }
4315	  }
4316
4317	/* It must be a primary-expression.  */
4318	postfix_expression
4319	  = cp_parser_primary_expression (parser, address_p, cast_p,
4320					  /*template_arg_p=*/false,
4321					  &idk);
4322      }
4323      break;
4324    }
4325
4326  /* Keep looping until the postfix-expression is complete.  */
4327  while (true)
4328    {
4329      if (idk == CP_ID_KIND_UNQUALIFIED
4330	  && TREE_CODE (postfix_expression) == IDENTIFIER_NODE
4331	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
4332	/* It is not a Koenig lookup function call.  */
4333	postfix_expression
4334	  = unqualified_name_lookup_error (postfix_expression);
4335
4336      /* Peek at the next token.  */
4337      token = cp_lexer_peek_token (parser->lexer);
4338
4339      switch (token->type)
4340	{
4341	case CPP_OPEN_SQUARE:
4342	  postfix_expression
4343	    = cp_parser_postfix_open_square_expression (parser,
4344							postfix_expression,
4345							false);
4346	  idk = CP_ID_KIND_NONE;
4347	  break;
4348
4349	case CPP_OPEN_PAREN:
4350	  /* postfix-expression ( expression-list [opt] ) */
4351	  {
4352	    bool koenig_p;
4353	    bool is_builtin_constant_p;
4354	    bool saved_integral_constant_expression_p = false;
4355	    bool saved_non_integral_constant_expression_p = false;
4356	    tree args;
4357
4358	    is_builtin_constant_p
4359	      = DECL_IS_BUILTIN_CONSTANT_P (postfix_expression);
4360	    if (is_builtin_constant_p)
4361	      {
4362		/* The whole point of __builtin_constant_p is to allow
4363		   non-constant expressions to appear as arguments.  */
4364		saved_integral_constant_expression_p
4365		  = parser->integral_constant_expression_p;
4366		saved_non_integral_constant_expression_p
4367		  = parser->non_integral_constant_expression_p;
4368		parser->integral_constant_expression_p = false;
4369	      }
4370	    args = (cp_parser_parenthesized_expression_list
4371		    (parser, /*is_attribute_list=*/false,
4372		     /*cast_p=*/false,
4373		     /*non_constant_p=*/NULL));
4374	    if (is_builtin_constant_p)
4375	      {
4376		parser->integral_constant_expression_p
4377		  = saved_integral_constant_expression_p;
4378		parser->non_integral_constant_expression_p
4379		  = saved_non_integral_constant_expression_p;
4380	      }
4381
4382	    if (args == error_mark_node)
4383	      {
4384		postfix_expression = error_mark_node;
4385		break;
4386	      }
4387
4388	    /* Function calls are not permitted in
4389	       constant-expressions.  */
4390	    if (! builtin_valid_in_constant_expr_p (postfix_expression)
4391		&& cp_parser_non_integral_constant_expression (parser,
4392							       "a function call"))
4393	      {
4394		postfix_expression = error_mark_node;
4395		break;
4396	      }
4397
4398	    koenig_p = false;
4399	    if (idk == CP_ID_KIND_UNQUALIFIED)
4400	      {
4401		if (TREE_CODE (postfix_expression) == IDENTIFIER_NODE)
4402		  {
4403		    if (args)
4404		      {
4405			koenig_p = true;
4406			postfix_expression
4407			  = perform_koenig_lookup (postfix_expression, args);
4408		      }
4409		    else
4410		      postfix_expression
4411			= unqualified_fn_lookup_error (postfix_expression);
4412		  }
4413		/* We do not perform argument-dependent lookup if
4414		   normal lookup finds a non-function, in accordance
4415		   with the expected resolution of DR 218.  */
4416		else if (args && is_overloaded_fn (postfix_expression))
4417		  {
4418		    tree fn = get_first_fn (postfix_expression);
4419
4420		    if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
4421		      fn = OVL_CURRENT (TREE_OPERAND (fn, 0));
4422
4423		    /* Only do argument dependent lookup if regular
4424		       lookup does not find a set of member functions.
4425		       [basic.lookup.koenig]/2a  */
4426		    if (!DECL_FUNCTION_MEMBER_P (fn))
4427		      {
4428			koenig_p = true;
4429			postfix_expression
4430			  = perform_koenig_lookup (postfix_expression, args);
4431		      }
4432		  }
4433	      }
4434
4435	    if (TREE_CODE (postfix_expression) == COMPONENT_REF)
4436	      {
4437		tree instance = TREE_OPERAND (postfix_expression, 0);
4438		tree fn = TREE_OPERAND (postfix_expression, 1);
4439
4440		if (processing_template_decl
4441		    && (type_dependent_expression_p (instance)
4442			|| (!BASELINK_P (fn)
4443			    && TREE_CODE (fn) != FIELD_DECL)
4444			|| type_dependent_expression_p (fn)
4445			|| any_type_dependent_arguments_p (args)))
4446		  {
4447		    postfix_expression
4448		      = build_min_nt (CALL_EXPR, postfix_expression,
4449				      args, NULL_TREE);
4450		    break;
4451		  }
4452
4453		if (BASELINK_P (fn))
4454		  postfix_expression
4455		    = (build_new_method_call
4456		       (instance, fn, args, NULL_TREE,
4457			(idk == CP_ID_KIND_QUALIFIED
4458			 ? LOOKUP_NONVIRTUAL : LOOKUP_NORMAL),
4459			/*fn_p=*/NULL));
4460		else
4461		  postfix_expression
4462		    = finish_call_expr (postfix_expression, args,
4463					/*disallow_virtual=*/false,
4464					/*koenig_p=*/false);
4465	      }
4466	    else if (TREE_CODE (postfix_expression) == OFFSET_REF
4467		     || TREE_CODE (postfix_expression) == MEMBER_REF
4468		     || TREE_CODE (postfix_expression) == DOTSTAR_EXPR)
4469	      postfix_expression = (build_offset_ref_call_from_tree
4470				    (postfix_expression, args));
4471	    else if (idk == CP_ID_KIND_QUALIFIED)
4472	      /* A call to a static class member, or a namespace-scope
4473		 function.  */
4474	      postfix_expression
4475		= finish_call_expr (postfix_expression, args,
4476				    /*disallow_virtual=*/true,
4477				    koenig_p);
4478	    else
4479	      /* All other function calls.  */
4480	      postfix_expression
4481		= finish_call_expr (postfix_expression, args,
4482				    /*disallow_virtual=*/false,
4483				    koenig_p);
4484
4485	    /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
4486	    idk = CP_ID_KIND_NONE;
4487	  }
4488	  break;
4489
4490	case CPP_DOT:
4491	case CPP_DEREF:
4492	  /* postfix-expression . template [opt] id-expression
4493	     postfix-expression . pseudo-destructor-name
4494	     postfix-expression -> template [opt] id-expression
4495	     postfix-expression -> pseudo-destructor-name */
4496
4497	  /* Consume the `.' or `->' operator.  */
4498	  cp_lexer_consume_token (parser->lexer);
4499
4500	  postfix_expression
4501	    = cp_parser_postfix_dot_deref_expression (parser, token->type,
4502						      postfix_expression,
4503						      false, &idk);
4504	  break;
4505
4506	case CPP_PLUS_PLUS:
4507	  /* postfix-expression ++  */
4508	  /* Consume the `++' token.  */
4509	  cp_lexer_consume_token (parser->lexer);
4510	  /* Generate a representation for the complete expression.  */
4511	  postfix_expression
4512	    = finish_increment_expr (postfix_expression,
4513				     POSTINCREMENT_EXPR);
4514	  /* Increments may not appear in constant-expressions.  */
4515	  if (cp_parser_non_integral_constant_expression (parser,
4516							  "an increment"))
4517	    postfix_expression = error_mark_node;
4518	  idk = CP_ID_KIND_NONE;
4519	  break;
4520
4521	case CPP_MINUS_MINUS:
4522	  /* postfix-expression -- */
4523	  /* Consume the `--' token.  */
4524	  cp_lexer_consume_token (parser->lexer);
4525	  /* Generate a representation for the complete expression.  */
4526	  postfix_expression
4527	    = finish_increment_expr (postfix_expression,
4528				     POSTDECREMENT_EXPR);
4529	  /* Decrements may not appear in constant-expressions.  */
4530	  if (cp_parser_non_integral_constant_expression (parser,
4531							  "a decrement"))
4532	    postfix_expression = error_mark_node;
4533	  idk = CP_ID_KIND_NONE;
4534	  break;
4535
4536	default:
4537	  return postfix_expression;
4538	}
4539    }
4540
4541  /* We should never get here.  */
4542  gcc_unreachable ();
4543  return error_mark_node;
4544}
4545
4546/* A subroutine of cp_parser_postfix_expression that also gets hijacked
4547   by cp_parser_builtin_offsetof.  We're looking for
4548
4549     postfix-expression [ expression ]
4550
4551   FOR_OFFSETOF is set if we're being called in that context, which
4552   changes how we deal with integer constant expressions.  */
4553
4554static tree
4555cp_parser_postfix_open_square_expression (cp_parser *parser,
4556					  tree postfix_expression,
4557					  bool for_offsetof)
4558{
4559  tree index;
4560
4561  /* Consume the `[' token.  */
4562  cp_lexer_consume_token (parser->lexer);
4563
4564  /* Parse the index expression.  */
4565  /* ??? For offsetof, there is a question of what to allow here.  If
4566     offsetof is not being used in an integral constant expression context,
4567     then we *could* get the right answer by computing the value at runtime.
4568     If we are in an integral constant expression context, then we might
4569     could accept any constant expression; hard to say without analysis.
4570     Rather than open the barn door too wide right away, allow only integer
4571     constant expressions here.  */
4572  if (for_offsetof)
4573    index = cp_parser_constant_expression (parser, false, NULL);
4574  else
4575    index = cp_parser_expression (parser, /*cast_p=*/false);
4576
4577  /* Look for the closing `]'.  */
4578  cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
4579
4580  /* Build the ARRAY_REF.  */
4581  postfix_expression = grok_array_decl (postfix_expression, index);
4582
4583  /* When not doing offsetof, array references are not permitted in
4584     constant-expressions.  */
4585  if (!for_offsetof
4586      && (cp_parser_non_integral_constant_expression
4587	  (parser, "an array reference")))
4588    postfix_expression = error_mark_node;
4589
4590  return postfix_expression;
4591}
4592
4593/* A subroutine of cp_parser_postfix_expression that also gets hijacked
4594   by cp_parser_builtin_offsetof.  We're looking for
4595
4596     postfix-expression . template [opt] id-expression
4597     postfix-expression . pseudo-destructor-name
4598     postfix-expression -> template [opt] id-expression
4599     postfix-expression -> pseudo-destructor-name
4600
4601   FOR_OFFSETOF is set if we're being called in that context.  That sorta
4602   limits what of the above we'll actually accept, but nevermind.
4603   TOKEN_TYPE is the "." or "->" token, which will already have been
4604   removed from the stream.  */
4605
4606static tree
4607cp_parser_postfix_dot_deref_expression (cp_parser *parser,
4608					enum cpp_ttype token_type,
4609					tree postfix_expression,
4610					bool for_offsetof, cp_id_kind *idk)
4611{
4612  tree name;
4613  bool dependent_p;
4614  bool pseudo_destructor_p;
4615  tree scope = NULL_TREE;
4616
4617  /* If this is a `->' operator, dereference the pointer.  */
4618  if (token_type == CPP_DEREF)
4619    postfix_expression = build_x_arrow (postfix_expression);
4620  /* Check to see whether or not the expression is type-dependent.  */
4621  dependent_p = type_dependent_expression_p (postfix_expression);
4622  /* The identifier following the `->' or `.' is not qualified.  */
4623  parser->scope = NULL_TREE;
4624  parser->qualifying_scope = NULL_TREE;
4625  parser->object_scope = NULL_TREE;
4626  *idk = CP_ID_KIND_NONE;
4627  /* Enter the scope corresponding to the type of the object
4628     given by the POSTFIX_EXPRESSION.  */
4629  if (!dependent_p && TREE_TYPE (postfix_expression) != NULL_TREE)
4630    {
4631      scope = TREE_TYPE (postfix_expression);
4632      /* According to the standard, no expression should ever have
4633	 reference type.  Unfortunately, we do not currently match
4634	 the standard in this respect in that our internal representation
4635	 of an expression may have reference type even when the standard
4636	 says it does not.  Therefore, we have to manually obtain the
4637	 underlying type here.  */
4638      scope = non_reference (scope);
4639      /* The type of the POSTFIX_EXPRESSION must be complete.  */
4640      if (scope == unknown_type_node)
4641	{
4642	  error ("%qE does not have class type", postfix_expression);
4643	  scope = NULL_TREE;
4644	}
4645      else
4646	scope = complete_type_or_else (scope, NULL_TREE);
4647      /* Let the name lookup machinery know that we are processing a
4648	 class member access expression.  */
4649      parser->context->object_type = scope;
4650      /* If something went wrong, we want to be able to discern that case,
4651	 as opposed to the case where there was no SCOPE due to the type
4652	 of expression being dependent.  */
4653      if (!scope)
4654	scope = error_mark_node;
4655      /* If the SCOPE was erroneous, make the various semantic analysis
4656	 functions exit quickly -- and without issuing additional error
4657	 messages.  */
4658      if (scope == error_mark_node)
4659	postfix_expression = error_mark_node;
4660    }
4661
4662  /* Assume this expression is not a pseudo-destructor access.  */
4663  pseudo_destructor_p = false;
4664
4665  /* If the SCOPE is a scalar type, then, if this is a valid program,
4666     we must be looking at a pseudo-destructor-name.  */
4667  if (scope && SCALAR_TYPE_P (scope))
4668    {
4669      tree s;
4670      tree type;
4671
4672      cp_parser_parse_tentatively (parser);
4673      /* Parse the pseudo-destructor-name.  */
4674      s = NULL_TREE;
4675      cp_parser_pseudo_destructor_name (parser, &s, &type);
4676      if (cp_parser_parse_definitely (parser))
4677	{
4678	  pseudo_destructor_p = true;
4679	  postfix_expression
4680	    = finish_pseudo_destructor_expr (postfix_expression,
4681					     s, TREE_TYPE (type));
4682	}
4683    }
4684
4685  if (!pseudo_destructor_p)
4686    {
4687      /* If the SCOPE is not a scalar type, we are looking at an
4688	 ordinary class member access expression, rather than a
4689	 pseudo-destructor-name.  */
4690      bool template_p;
4691      /* Parse the id-expression.  */
4692      name = (cp_parser_id_expression
4693	      (parser,
4694	       cp_parser_optional_template_keyword (parser),
4695	       /*check_dependency_p=*/true,
4696	       &template_p,
4697	       /*declarator_p=*/false,
4698	       /*optional_p=*/false));
4699      /* In general, build a SCOPE_REF if the member name is qualified.
4700	 However, if the name was not dependent and has already been
4701	 resolved; there is no need to build the SCOPE_REF.  For example;
4702
4703	     struct X { void f(); };
4704	     template <typename T> void f(T* t) { t->X::f(); }
4705
4706	 Even though "t" is dependent, "X::f" is not and has been resolved
4707	 to a BASELINK; there is no need to include scope information.  */
4708
4709      /* But we do need to remember that there was an explicit scope for
4710	 virtual function calls.  */
4711      if (parser->scope)
4712	*idk = CP_ID_KIND_QUALIFIED;
4713
4714      /* If the name is a template-id that names a type, we will get a
4715	 TYPE_DECL here.  That is invalid code.  */
4716      if (TREE_CODE (name) == TYPE_DECL)
4717	{
4718	  error ("invalid use of %qD", name);
4719	  postfix_expression = error_mark_node;
4720	}
4721      else
4722	{
4723	  if (name != error_mark_node && !BASELINK_P (name) && parser->scope)
4724	    {
4725	      name = build_qualified_name (/*type=*/NULL_TREE,
4726					   parser->scope,
4727					   name,
4728					   template_p);
4729	      parser->scope = NULL_TREE;
4730	      parser->qualifying_scope = NULL_TREE;
4731	      parser->object_scope = NULL_TREE;
4732	    }
4733	  if (scope && name && BASELINK_P (name))
4734	    adjust_result_of_qualified_name_lookup
4735	      (name, BINFO_TYPE (BASELINK_ACCESS_BINFO (name)), scope);
4736	  postfix_expression
4737	    = finish_class_member_access_expr (postfix_expression, name,
4738					       template_p);
4739	}
4740    }
4741
4742  /* We no longer need to look up names in the scope of the object on
4743     the left-hand side of the `.' or `->' operator.  */
4744  parser->context->object_type = NULL_TREE;
4745
4746  /* Outside of offsetof, these operators may not appear in
4747     constant-expressions.  */
4748  if (!for_offsetof
4749      && (cp_parser_non_integral_constant_expression
4750	  (parser, token_type == CPP_DEREF ? "'->'" : "`.'")))
4751    postfix_expression = error_mark_node;
4752
4753  return postfix_expression;
4754}
4755
4756/* Parse a parenthesized expression-list.
4757
4758   expression-list:
4759     assignment-expression
4760     expression-list, assignment-expression
4761
4762   attribute-list:
4763     expression-list
4764     identifier
4765     identifier, expression-list
4766
4767   CAST_P is true if this expression is the target of a cast.
4768
4769   Returns a TREE_LIST.  The TREE_VALUE of each node is a
4770   representation of an assignment-expression.  Note that a TREE_LIST
4771   is returned even if there is only a single expression in the list.
4772   error_mark_node is returned if the ( and or ) are
4773   missing. NULL_TREE is returned on no expressions. The parentheses
4774   are eaten. IS_ATTRIBUTE_LIST is true if this is really an attribute
4775   list being parsed.  If NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P
4776   indicates whether or not all of the expressions in the list were
4777   constant.  */
4778
4779static tree
4780cp_parser_parenthesized_expression_list (cp_parser* parser,
4781					 bool is_attribute_list,
4782					 bool cast_p,
4783					 bool *non_constant_p)
4784{
4785  tree expression_list = NULL_TREE;
4786  bool fold_expr_p = is_attribute_list;
4787  tree identifier = NULL_TREE;
4788
4789  /* Assume all the expressions will be constant.  */
4790  if (non_constant_p)
4791    *non_constant_p = false;
4792
4793  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
4794    return error_mark_node;
4795
4796  /* Consume expressions until there are no more.  */
4797  if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
4798    while (true)
4799      {
4800	tree expr;
4801
4802	/* At the beginning of attribute lists, check to see if the
4803	   next token is an identifier.  */
4804	if (is_attribute_list
4805	    && cp_lexer_peek_token (parser->lexer)->type == CPP_NAME)
4806	  {
4807	    cp_token *token;
4808
4809	    /* Consume the identifier.  */
4810	    token = cp_lexer_consume_token (parser->lexer);
4811	    /* Save the identifier.  */
4812	    identifier = token->u.value;
4813	  }
4814	else
4815	  {
4816	    /* Parse the next assignment-expression.  */
4817	    if (non_constant_p)
4818	      {
4819		bool expr_non_constant_p;
4820		expr = (cp_parser_constant_expression
4821			(parser, /*allow_non_constant_p=*/true,
4822			 &expr_non_constant_p));
4823		if (expr_non_constant_p)
4824		  *non_constant_p = true;
4825	      }
4826	    else
4827	      expr = cp_parser_assignment_expression (parser, cast_p);
4828
4829	    if (fold_expr_p)
4830	      expr = fold_non_dependent_expr (expr);
4831
4832	     /* Add it to the list.  We add error_mark_node
4833		expressions to the list, so that we can still tell if
4834		the correct form for a parenthesized expression-list
4835		is found. That gives better errors.  */
4836	    expression_list = tree_cons (NULL_TREE, expr, expression_list);
4837
4838	    if (expr == error_mark_node)
4839	      goto skip_comma;
4840	  }
4841
4842	/* After the first item, attribute lists look the same as
4843	   expression lists.  */
4844	is_attribute_list = false;
4845
4846      get_comma:;
4847	/* If the next token isn't a `,', then we are done.  */
4848	if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
4849	  break;
4850
4851	/* Otherwise, consume the `,' and keep going.  */
4852	cp_lexer_consume_token (parser->lexer);
4853      }
4854
4855  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
4856    {
4857      int ending;
4858
4859    skip_comma:;
4860      /* We try and resync to an unnested comma, as that will give the
4861	 user better diagnostics.  */
4862      ending = cp_parser_skip_to_closing_parenthesis (parser,
4863						      /*recovering=*/true,
4864						      /*or_comma=*/true,
4865						      /*consume_paren=*/true);
4866      if (ending < 0)
4867	goto get_comma;
4868      if (!ending)
4869	return error_mark_node;
4870    }
4871
4872  /* We built up the list in reverse order so we must reverse it now.  */
4873  expression_list = nreverse (expression_list);
4874  if (identifier)
4875    expression_list = tree_cons (NULL_TREE, identifier, expression_list);
4876
4877  return expression_list;
4878}
4879
4880/* Parse a pseudo-destructor-name.
4881
4882   pseudo-destructor-name:
4883     :: [opt] nested-name-specifier [opt] type-name :: ~ type-name
4884     :: [opt] nested-name-specifier template template-id :: ~ type-name
4885     :: [opt] nested-name-specifier [opt] ~ type-name
4886
4887   If either of the first two productions is used, sets *SCOPE to the
4888   TYPE specified before the final `::'.  Otherwise, *SCOPE is set to
4889   NULL_TREE.  *TYPE is set to the TYPE_DECL for the final type-name,
4890   or ERROR_MARK_NODE if the parse fails.  */
4891
4892static void
4893cp_parser_pseudo_destructor_name (cp_parser* parser,
4894				  tree* scope,
4895				  tree* type)
4896{
4897  bool nested_name_specifier_p;
4898
4899  /* Assume that things will not work out.  */
4900  *type = error_mark_node;
4901
4902  /* Look for the optional `::' operator.  */
4903  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/true);
4904  /* Look for the optional nested-name-specifier.  */
4905  nested_name_specifier_p
4906    = (cp_parser_nested_name_specifier_opt (parser,
4907					    /*typename_keyword_p=*/false,
4908					    /*check_dependency_p=*/true,
4909					    /*type_p=*/false,
4910					    /*is_declaration=*/true)
4911       != NULL_TREE);
4912  /* Now, if we saw a nested-name-specifier, we might be doing the
4913     second production.  */
4914  if (nested_name_specifier_p
4915      && cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
4916    {
4917      /* Consume the `template' keyword.  */
4918      cp_lexer_consume_token (parser->lexer);
4919      /* Parse the template-id.  */
4920      cp_parser_template_id (parser,
4921			     /*template_keyword_p=*/true,
4922			     /*check_dependency_p=*/false,
4923			     /*is_declaration=*/true);
4924      /* Look for the `::' token.  */
4925      cp_parser_require (parser, CPP_SCOPE, "`::'");
4926    }
4927  /* If the next token is not a `~', then there might be some
4928     additional qualification.  */
4929  else if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMPL))
4930    {
4931      /* Look for the type-name.  */
4932      *scope = TREE_TYPE (cp_parser_type_name (parser));
4933
4934      if (*scope == error_mark_node)
4935	return;
4936
4937      /* If we don't have ::~, then something has gone wrong.  Since
4938	 the only caller of this function is looking for something
4939	 after `.' or `->' after a scalar type, most likely the
4940	 program is trying to get a member of a non-aggregate
4941	 type.  */
4942      if (cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE)
4943	  || cp_lexer_peek_nth_token (parser->lexer, 2)->type != CPP_COMPL)
4944	{
4945	  cp_parser_error (parser, "request for member of non-aggregate type");
4946	  return;
4947	}
4948
4949      /* Look for the `::' token.  */
4950      cp_parser_require (parser, CPP_SCOPE, "`::'");
4951    }
4952  else
4953    *scope = NULL_TREE;
4954
4955  /* Look for the `~'.  */
4956  cp_parser_require (parser, CPP_COMPL, "`~'");
4957  /* Look for the type-name again.  We are not responsible for
4958     checking that it matches the first type-name.  */
4959  *type = cp_parser_type_name (parser);
4960}
4961
4962/* Parse a unary-expression.
4963
4964   unary-expression:
4965     postfix-expression
4966     ++ cast-expression
4967     -- cast-expression
4968     unary-operator cast-expression
4969     sizeof unary-expression
4970     sizeof ( type-id )
4971     new-expression
4972     delete-expression
4973
4974   GNU Extensions:
4975
4976   unary-expression:
4977     __extension__ cast-expression
4978     __alignof__ unary-expression
4979     __alignof__ ( type-id )
4980     __real__ cast-expression
4981     __imag__ cast-expression
4982     && identifier
4983
4984   ADDRESS_P is true iff the unary-expression is appearing as the
4985   operand of the `&' operator.   CAST_P is true if this expression is
4986   the target of a cast.
4987
4988   Returns a representation of the expression.  */
4989
4990static tree
4991cp_parser_unary_expression (cp_parser *parser, bool address_p, bool cast_p)
4992{
4993  cp_token *token;
4994  enum tree_code unary_operator;
4995
4996  /* Peek at the next token.  */
4997  token = cp_lexer_peek_token (parser->lexer);
4998  /* Some keywords give away the kind of expression.  */
4999  if (token->type == CPP_KEYWORD)
5000    {
5001      enum rid keyword = token->keyword;
5002
5003      switch (keyword)
5004	{
5005	case RID_ALIGNOF:
5006	case RID_SIZEOF:
5007	  {
5008	    tree operand;
5009	    enum tree_code op;
5010
5011	    op = keyword == RID_ALIGNOF ? ALIGNOF_EXPR : SIZEOF_EXPR;
5012	    /* Consume the token.  */
5013	    cp_lexer_consume_token (parser->lexer);
5014	    /* Parse the operand.  */
5015	    operand = cp_parser_sizeof_operand (parser, keyword);
5016
5017	    if (TYPE_P (operand))
5018	      return cxx_sizeof_or_alignof_type (operand, op, true);
5019	    else
5020	      return cxx_sizeof_or_alignof_expr (operand, op);
5021	  }
5022
5023	case RID_NEW:
5024	  return cp_parser_new_expression (parser);
5025
5026	case RID_DELETE:
5027	  return cp_parser_delete_expression (parser);
5028
5029	case RID_EXTENSION:
5030	  {
5031	    /* The saved value of the PEDANTIC flag.  */
5032	    int saved_pedantic;
5033	    tree expr;
5034
5035	    /* Save away the PEDANTIC flag.  */
5036	    cp_parser_extension_opt (parser, &saved_pedantic);
5037	    /* Parse the cast-expression.  */
5038	    expr = cp_parser_simple_cast_expression (parser);
5039	    /* Restore the PEDANTIC flag.  */
5040	    pedantic = saved_pedantic;
5041
5042	    return expr;
5043	  }
5044
5045	case RID_REALPART:
5046	case RID_IMAGPART:
5047	  {
5048	    tree expression;
5049
5050	    /* Consume the `__real__' or `__imag__' token.  */
5051	    cp_lexer_consume_token (parser->lexer);
5052	    /* Parse the cast-expression.  */
5053	    expression = cp_parser_simple_cast_expression (parser);
5054	    /* Create the complete representation.  */
5055	    return build_x_unary_op ((keyword == RID_REALPART
5056				      ? REALPART_EXPR : IMAGPART_EXPR),
5057				     expression);
5058	  }
5059	  break;
5060
5061	default:
5062	  break;
5063	}
5064    }
5065
5066  /* Look for the `:: new' and `:: delete', which also signal the
5067     beginning of a new-expression, or delete-expression,
5068     respectively.  If the next token is `::', then it might be one of
5069     these.  */
5070  if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
5071    {
5072      enum rid keyword;
5073
5074      /* See if the token after the `::' is one of the keywords in
5075	 which we're interested.  */
5076      keyword = cp_lexer_peek_nth_token (parser->lexer, 2)->keyword;
5077      /* If it's `new', we have a new-expression.  */
5078      if (keyword == RID_NEW)
5079	return cp_parser_new_expression (parser);
5080      /* Similarly, for `delete'.  */
5081      else if (keyword == RID_DELETE)
5082	return cp_parser_delete_expression (parser);
5083    }
5084
5085  /* Look for a unary operator.  */
5086  unary_operator = cp_parser_unary_operator (token);
5087  /* The `++' and `--' operators can be handled similarly, even though
5088     they are not technically unary-operators in the grammar.  */
5089  if (unary_operator == ERROR_MARK)
5090    {
5091      if (token->type == CPP_PLUS_PLUS)
5092	unary_operator = PREINCREMENT_EXPR;
5093      else if (token->type == CPP_MINUS_MINUS)
5094	unary_operator = PREDECREMENT_EXPR;
5095      /* Handle the GNU address-of-label extension.  */
5096      else if (cp_parser_allow_gnu_extensions_p (parser)
5097	       && token->type == CPP_AND_AND)
5098	{
5099	  tree identifier;
5100
5101	  /* Consume the '&&' token.  */
5102	  cp_lexer_consume_token (parser->lexer);
5103	  /* Look for the identifier.  */
5104	  identifier = cp_parser_identifier (parser);
5105	  /* Create an expression representing the address.  */
5106	  return finish_label_address_expr (identifier);
5107	}
5108    }
5109  if (unary_operator != ERROR_MARK)
5110    {
5111      tree cast_expression;
5112      tree expression = error_mark_node;
5113      const char *non_constant_p = NULL;
5114
5115      /* Consume the operator token.  */
5116      token = cp_lexer_consume_token (parser->lexer);
5117      /* Parse the cast-expression.  */
5118      cast_expression
5119	= cp_parser_cast_expression (parser,
5120				     unary_operator == ADDR_EXPR,
5121				     /*cast_p=*/false);
5122      /* Now, build an appropriate representation.  */
5123      switch (unary_operator)
5124	{
5125	case INDIRECT_REF:
5126	  non_constant_p = "`*'";
5127	  expression = build_x_indirect_ref (cast_expression, "unary *");
5128	  break;
5129
5130	case ADDR_EXPR:
5131	  non_constant_p = "`&'";
5132	  /* Fall through.  */
5133	case BIT_NOT_EXPR:
5134	  expression = build_x_unary_op (unary_operator, cast_expression);
5135	  break;
5136
5137	case PREINCREMENT_EXPR:
5138	case PREDECREMENT_EXPR:
5139	  non_constant_p = (unary_operator == PREINCREMENT_EXPR
5140			    ? "`++'" : "`--'");
5141	  /* Fall through.  */
5142	case UNARY_PLUS_EXPR:
5143	case NEGATE_EXPR:
5144	case TRUTH_NOT_EXPR:
5145	  expression = finish_unary_op_expr (unary_operator, cast_expression);
5146	  break;
5147
5148	default:
5149	  gcc_unreachable ();
5150	}
5151
5152      if (non_constant_p
5153	  && cp_parser_non_integral_constant_expression (parser,
5154							 non_constant_p))
5155	expression = error_mark_node;
5156
5157      return expression;
5158    }
5159
5160  return cp_parser_postfix_expression (parser, address_p, cast_p);
5161}
5162
5163/* Returns ERROR_MARK if TOKEN is not a unary-operator.  If TOKEN is a
5164   unary-operator, the corresponding tree code is returned.  */
5165
5166static enum tree_code
5167cp_parser_unary_operator (cp_token* token)
5168{
5169  switch (token->type)
5170    {
5171    case CPP_MULT:
5172      return INDIRECT_REF;
5173
5174    case CPP_AND:
5175      return ADDR_EXPR;
5176
5177    case CPP_PLUS:
5178      return UNARY_PLUS_EXPR;
5179
5180    case CPP_MINUS:
5181      return NEGATE_EXPR;
5182
5183    case CPP_NOT:
5184      return TRUTH_NOT_EXPR;
5185
5186    case CPP_COMPL:
5187      return BIT_NOT_EXPR;
5188
5189    default:
5190      return ERROR_MARK;
5191    }
5192}
5193
5194/* Parse a new-expression.
5195
5196   new-expression:
5197     :: [opt] new new-placement [opt] new-type-id new-initializer [opt]
5198     :: [opt] new new-placement [opt] ( type-id ) new-initializer [opt]
5199
5200   Returns a representation of the expression.  */
5201
5202static tree
5203cp_parser_new_expression (cp_parser* parser)
5204{
5205  bool global_scope_p;
5206  tree placement;
5207  tree type;
5208  tree initializer;
5209  tree nelts;
5210
5211  /* Look for the optional `::' operator.  */
5212  global_scope_p
5213    = (cp_parser_global_scope_opt (parser,
5214				   /*current_scope_valid_p=*/false)
5215       != NULL_TREE);
5216  /* Look for the `new' operator.  */
5217  cp_parser_require_keyword (parser, RID_NEW, "`new'");
5218  /* There's no easy way to tell a new-placement from the
5219     `( type-id )' construct.  */
5220  cp_parser_parse_tentatively (parser);
5221  /* Look for a new-placement.  */
5222  placement = cp_parser_new_placement (parser);
5223  /* If that didn't work out, there's no new-placement.  */
5224  if (!cp_parser_parse_definitely (parser))
5225    placement = NULL_TREE;
5226
5227  /* If the next token is a `(', then we have a parenthesized
5228     type-id.  */
5229  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5230    {
5231      /* Consume the `('.  */
5232      cp_lexer_consume_token (parser->lexer);
5233      /* Parse the type-id.  */
5234      type = cp_parser_type_id (parser);
5235      /* Look for the closing `)'.  */
5236      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5237      /* There should not be a direct-new-declarator in this production,
5238	 but GCC used to allowed this, so we check and emit a sensible error
5239	 message for this case.  */
5240      if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5241	{
5242	  error ("array bound forbidden after parenthesized type-id");
5243	  inform ("try removing the parentheses around the type-id");
5244	  cp_parser_direct_new_declarator (parser);
5245	}
5246      nelts = NULL_TREE;
5247    }
5248  /* Otherwise, there must be a new-type-id.  */
5249  else
5250    type = cp_parser_new_type_id (parser, &nelts);
5251
5252  /* If the next token is a `(', then we have a new-initializer.  */
5253  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5254    initializer = cp_parser_new_initializer (parser);
5255  else
5256    initializer = NULL_TREE;
5257
5258  /* A new-expression may not appear in an integral constant
5259     expression.  */
5260  if (cp_parser_non_integral_constant_expression (parser, "`new'"))
5261    return error_mark_node;
5262
5263  /* Create a representation of the new-expression.  */
5264  return build_new (placement, type, nelts, initializer, global_scope_p);
5265}
5266
5267/* Parse a new-placement.
5268
5269   new-placement:
5270     ( expression-list )
5271
5272   Returns the same representation as for an expression-list.  */
5273
5274static tree
5275cp_parser_new_placement (cp_parser* parser)
5276{
5277  tree expression_list;
5278
5279  /* Parse the expression-list.  */
5280  expression_list = (cp_parser_parenthesized_expression_list
5281		     (parser, false, /*cast_p=*/false,
5282		      /*non_constant_p=*/NULL));
5283
5284  return expression_list;
5285}
5286
5287/* Parse a new-type-id.
5288
5289   new-type-id:
5290     type-specifier-seq new-declarator [opt]
5291
5292   Returns the TYPE allocated.  If the new-type-id indicates an array
5293   type, *NELTS is set to the number of elements in the last array
5294   bound; the TYPE will not include the last array bound.  */
5295
5296static tree
5297cp_parser_new_type_id (cp_parser* parser, tree *nelts)
5298{
5299  cp_decl_specifier_seq type_specifier_seq;
5300  cp_declarator *new_declarator;
5301  cp_declarator *declarator;
5302  cp_declarator *outer_declarator;
5303  const char *saved_message;
5304  tree type;
5305
5306  /* The type-specifier sequence must not contain type definitions.
5307     (It cannot contain declarations of new types either, but if they
5308     are not definitions we will catch that because they are not
5309     complete.)  */
5310  saved_message = parser->type_definition_forbidden_message;
5311  parser->type_definition_forbidden_message
5312    = "types may not be defined in a new-type-id";
5313  /* Parse the type-specifier-seq.  */
5314  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
5315				&type_specifier_seq);
5316  /* Restore the old message.  */
5317  parser->type_definition_forbidden_message = saved_message;
5318  /* Parse the new-declarator.  */
5319  new_declarator = cp_parser_new_declarator_opt (parser);
5320
5321  /* Determine the number of elements in the last array dimension, if
5322     any.  */
5323  *nelts = NULL_TREE;
5324  /* Skip down to the last array dimension.  */
5325  declarator = new_declarator;
5326  outer_declarator = NULL;
5327  while (declarator && (declarator->kind == cdk_pointer
5328			|| declarator->kind == cdk_ptrmem))
5329    {
5330      outer_declarator = declarator;
5331      declarator = declarator->declarator;
5332    }
5333  while (declarator
5334	 && declarator->kind == cdk_array
5335	 && declarator->declarator
5336	 && declarator->declarator->kind == cdk_array)
5337    {
5338      outer_declarator = declarator;
5339      declarator = declarator->declarator;
5340    }
5341
5342  if (declarator && declarator->kind == cdk_array)
5343    {
5344      *nelts = declarator->u.array.bounds;
5345      if (*nelts == error_mark_node)
5346	*nelts = integer_one_node;
5347
5348      if (outer_declarator)
5349	outer_declarator->declarator = declarator->declarator;
5350      else
5351	new_declarator = NULL;
5352    }
5353
5354  type = groktypename (&type_specifier_seq, new_declarator);
5355  if (TREE_CODE (type) == ARRAY_TYPE && *nelts == NULL_TREE)
5356    {
5357      *nelts = array_type_nelts_top (type);
5358      type = TREE_TYPE (type);
5359    }
5360  return type;
5361}
5362
5363/* Parse an (optional) new-declarator.
5364
5365   new-declarator:
5366     ptr-operator new-declarator [opt]
5367     direct-new-declarator
5368
5369   Returns the declarator.  */
5370
5371static cp_declarator *
5372cp_parser_new_declarator_opt (cp_parser* parser)
5373{
5374  enum tree_code code;
5375  tree type;
5376  cp_cv_quals cv_quals;
5377
5378  /* We don't know if there's a ptr-operator next, or not.  */
5379  cp_parser_parse_tentatively (parser);
5380  /* Look for a ptr-operator.  */
5381  code = cp_parser_ptr_operator (parser, &type, &cv_quals);
5382  /* If that worked, look for more new-declarators.  */
5383  if (cp_parser_parse_definitely (parser))
5384    {
5385      cp_declarator *declarator;
5386
5387      /* Parse another optional declarator.  */
5388      declarator = cp_parser_new_declarator_opt (parser);
5389
5390      /* Create the representation of the declarator.  */
5391      if (type)
5392	declarator = make_ptrmem_declarator (cv_quals, type, declarator);
5393      else if (code == INDIRECT_REF)
5394	declarator = make_pointer_declarator (cv_quals, declarator);
5395      else
5396	declarator = make_reference_declarator (cv_quals, declarator);
5397
5398      return declarator;
5399    }
5400
5401  /* If the next token is a `[', there is a direct-new-declarator.  */
5402  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5403    return cp_parser_direct_new_declarator (parser);
5404
5405  return NULL;
5406}
5407
5408/* Parse a direct-new-declarator.
5409
5410   direct-new-declarator:
5411     [ expression ]
5412     direct-new-declarator [constant-expression]
5413
5414   */
5415
5416static cp_declarator *
5417cp_parser_direct_new_declarator (cp_parser* parser)
5418{
5419  cp_declarator *declarator = NULL;
5420
5421  while (true)
5422    {
5423      tree expression;
5424
5425      /* Look for the opening `['.  */
5426      cp_parser_require (parser, CPP_OPEN_SQUARE, "`['");
5427      /* The first expression is not required to be constant.  */
5428      if (!declarator)
5429	{
5430	  expression = cp_parser_expression (parser, /*cast_p=*/false);
5431	  /* The standard requires that the expression have integral
5432	     type.  DR 74 adds enumeration types.  We believe that the
5433	     real intent is that these expressions be handled like the
5434	     expression in a `switch' condition, which also allows
5435	     classes with a single conversion to integral or
5436	     enumeration type.  */
5437	  if (!processing_template_decl)
5438	    {
5439	      expression
5440		= build_expr_type_conversion (WANT_INT | WANT_ENUM,
5441					      expression,
5442					      /*complain=*/true);
5443	      if (!expression)
5444		{
5445		  error ("expression in new-declarator must have integral "
5446			 "or enumeration type");
5447		  expression = error_mark_node;
5448		}
5449	    }
5450	}
5451      /* But all the other expressions must be.  */
5452      else
5453	expression
5454	  = cp_parser_constant_expression (parser,
5455					   /*allow_non_constant=*/false,
5456					   NULL);
5457      /* Look for the closing `]'.  */
5458      cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5459
5460      /* Add this bound to the declarator.  */
5461      declarator = make_array_declarator (declarator, expression);
5462
5463      /* If the next token is not a `[', then there are no more
5464	 bounds.  */
5465      if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_SQUARE))
5466	break;
5467    }
5468
5469  return declarator;
5470}
5471
5472/* Parse a new-initializer.
5473
5474   new-initializer:
5475     ( expression-list [opt] )
5476
5477   Returns a representation of the expression-list.  If there is no
5478   expression-list, VOID_ZERO_NODE is returned.  */
5479
5480static tree
5481cp_parser_new_initializer (cp_parser* parser)
5482{
5483  tree expression_list;
5484
5485  expression_list = (cp_parser_parenthesized_expression_list
5486		     (parser, false, /*cast_p=*/false,
5487		      /*non_constant_p=*/NULL));
5488  if (!expression_list)
5489    expression_list = void_zero_node;
5490
5491  return expression_list;
5492}
5493
5494/* Parse a delete-expression.
5495
5496   delete-expression:
5497     :: [opt] delete cast-expression
5498     :: [opt] delete [ ] cast-expression
5499
5500   Returns a representation of the expression.  */
5501
5502static tree
5503cp_parser_delete_expression (cp_parser* parser)
5504{
5505  bool global_scope_p;
5506  bool array_p;
5507  tree expression;
5508
5509  /* Look for the optional `::' operator.  */
5510  global_scope_p
5511    = (cp_parser_global_scope_opt (parser,
5512				   /*current_scope_valid_p=*/false)
5513       != NULL_TREE);
5514  /* Look for the `delete' keyword.  */
5515  cp_parser_require_keyword (parser, RID_DELETE, "`delete'");
5516  /* See if the array syntax is in use.  */
5517  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
5518    {
5519      /* Consume the `[' token.  */
5520      cp_lexer_consume_token (parser->lexer);
5521      /* Look for the `]' token.  */
5522      cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
5523      /* Remember that this is the `[]' construct.  */
5524      array_p = true;
5525    }
5526  else
5527    array_p = false;
5528
5529  /* Parse the cast-expression.  */
5530  expression = cp_parser_simple_cast_expression (parser);
5531
5532  /* A delete-expression may not appear in an integral constant
5533     expression.  */
5534  if (cp_parser_non_integral_constant_expression (parser, "`delete'"))
5535    return error_mark_node;
5536
5537  return delete_sanity (expression, NULL_TREE, array_p, global_scope_p);
5538}
5539
5540/* Parse a cast-expression.
5541
5542   cast-expression:
5543     unary-expression
5544     ( type-id ) cast-expression
5545
5546   ADDRESS_P is true iff the unary-expression is appearing as the
5547   operand of the `&' operator.   CAST_P is true if this expression is
5548   the target of a cast.
5549
5550   Returns a representation of the expression.  */
5551
5552static tree
5553cp_parser_cast_expression (cp_parser *parser, bool address_p, bool cast_p)
5554{
5555  /* If it's a `(', then we might be looking at a cast.  */
5556  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
5557    {
5558      tree type = NULL_TREE;
5559      tree expr = NULL_TREE;
5560      bool compound_literal_p;
5561      const char *saved_message;
5562
5563      /* There's no way to know yet whether or not this is a cast.
5564	 For example, `(int (3))' is a unary-expression, while `(int)
5565	 3' is a cast.  So, we resort to parsing tentatively.  */
5566      cp_parser_parse_tentatively (parser);
5567      /* Types may not be defined in a cast.  */
5568      saved_message = parser->type_definition_forbidden_message;
5569      parser->type_definition_forbidden_message
5570	= "types may not be defined in casts";
5571      /* Consume the `('.  */
5572      cp_lexer_consume_token (parser->lexer);
5573      /* A very tricky bit is that `(struct S) { 3 }' is a
5574	 compound-literal (which we permit in C++ as an extension).
5575	 But, that construct is not a cast-expression -- it is a
5576	 postfix-expression.  (The reason is that `(struct S) { 3 }.i'
5577	 is legal; if the compound-literal were a cast-expression,
5578	 you'd need an extra set of parentheses.)  But, if we parse
5579	 the type-id, and it happens to be a class-specifier, then we
5580	 will commit to the parse at that point, because we cannot
5581	 undo the action that is done when creating a new class.  So,
5582	 then we cannot back up and do a postfix-expression.
5583
5584	 Therefore, we scan ahead to the closing `)', and check to see
5585	 if the token after the `)' is a `{'.  If so, we are not
5586	 looking at a cast-expression.
5587
5588	 Save tokens so that we can put them back.  */
5589      cp_lexer_save_tokens (parser->lexer);
5590      /* Skip tokens until the next token is a closing parenthesis.
5591	 If we find the closing `)', and the next token is a `{', then
5592	 we are looking at a compound-literal.  */
5593      compound_literal_p
5594	= (cp_parser_skip_to_closing_parenthesis (parser, false, false,
5595						  /*consume_paren=*/true)
5596	   && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE));
5597      /* Roll back the tokens we skipped.  */
5598      cp_lexer_rollback_tokens (parser->lexer);
5599      /* If we were looking at a compound-literal, simulate an error
5600	 so that the call to cp_parser_parse_definitely below will
5601	 fail.  */
5602      if (compound_literal_p)
5603	cp_parser_simulate_error (parser);
5604      else
5605	{
5606	  bool saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
5607	  parser->in_type_id_in_expr_p = true;
5608	  /* Look for the type-id.  */
5609	  type = cp_parser_type_id (parser);
5610	  /* Look for the closing `)'.  */
5611	  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
5612	  parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
5613	}
5614
5615      /* Restore the saved message.  */
5616      parser->type_definition_forbidden_message = saved_message;
5617
5618      /* If ok so far, parse the dependent expression. We cannot be
5619	 sure it is a cast. Consider `(T ())'.  It is a parenthesized
5620	 ctor of T, but looks like a cast to function returning T
5621	 without a dependent expression.  */
5622      if (!cp_parser_error_occurred (parser))
5623	expr = cp_parser_cast_expression (parser,
5624					  /*address_p=*/false,
5625					  /*cast_p=*/true);
5626
5627      if (cp_parser_parse_definitely (parser))
5628	{
5629	  /* Warn about old-style casts, if so requested.  */
5630	  if (warn_old_style_cast
5631	      && !in_system_header
5632	      && !VOID_TYPE_P (type)
5633	      && current_lang_name != lang_name_c)
5634	    warning (OPT_Wold_style_cast, "use of old-style cast");
5635
5636	  /* Only type conversions to integral or enumeration types
5637	     can be used in constant-expressions.  */
5638	  if (!cast_valid_in_integral_constant_expression_p (type)
5639	      && (cp_parser_non_integral_constant_expression
5640		  (parser,
5641		   "a cast to a type other than an integral or "
5642		   "enumeration type")))
5643	    return error_mark_node;
5644
5645	  /* Perform the cast.  */
5646	  expr = build_c_cast (type, expr);
5647	  return expr;
5648	}
5649    }
5650
5651  /* If we get here, then it's not a cast, so it must be a
5652     unary-expression.  */
5653  return cp_parser_unary_expression (parser, address_p, cast_p);
5654}
5655
5656/* Parse a binary expression of the general form:
5657
5658   pm-expression:
5659     cast-expression
5660     pm-expression .* cast-expression
5661     pm-expression ->* cast-expression
5662
5663   multiplicative-expression:
5664     pm-expression
5665     multiplicative-expression * pm-expression
5666     multiplicative-expression / pm-expression
5667     multiplicative-expression % pm-expression
5668
5669   additive-expression:
5670     multiplicative-expression
5671     additive-expression + multiplicative-expression
5672     additive-expression - multiplicative-expression
5673
5674   shift-expression:
5675     additive-expression
5676     shift-expression << additive-expression
5677     shift-expression >> additive-expression
5678
5679   relational-expression:
5680     shift-expression
5681     relational-expression < shift-expression
5682     relational-expression > shift-expression
5683     relational-expression <= shift-expression
5684     relational-expression >= shift-expression
5685
5686  GNU Extension:
5687
5688   relational-expression:
5689     relational-expression <? shift-expression
5690     relational-expression >? shift-expression
5691
5692   equality-expression:
5693     relational-expression
5694     equality-expression == relational-expression
5695     equality-expression != relational-expression
5696
5697   and-expression:
5698     equality-expression
5699     and-expression & equality-expression
5700
5701   exclusive-or-expression:
5702     and-expression
5703     exclusive-or-expression ^ and-expression
5704
5705   inclusive-or-expression:
5706     exclusive-or-expression
5707     inclusive-or-expression | exclusive-or-expression
5708
5709   logical-and-expression:
5710     inclusive-or-expression
5711     logical-and-expression && inclusive-or-expression
5712
5713   logical-or-expression:
5714     logical-and-expression
5715     logical-or-expression || logical-and-expression
5716
5717   All these are implemented with a single function like:
5718
5719   binary-expression:
5720     simple-cast-expression
5721     binary-expression <token> binary-expression
5722
5723   CAST_P is true if this expression is the target of a cast.
5724
5725   The binops_by_token map is used to get the tree codes for each <token> type.
5726   binary-expressions are associated according to a precedence table.  */
5727
5728#define TOKEN_PRECEDENCE(token) \
5729  ((token->type == CPP_GREATER && !parser->greater_than_is_operator_p) \
5730   ? PREC_NOT_OPERATOR \
5731   : binops_by_token[token->type].prec)
5732
5733static tree
5734cp_parser_binary_expression (cp_parser* parser, bool cast_p)
5735{
5736  cp_parser_expression_stack stack;
5737  cp_parser_expression_stack_entry *sp = &stack[0];
5738  tree lhs, rhs;
5739  cp_token *token;
5740  enum tree_code tree_type, lhs_type, rhs_type;
5741  enum cp_parser_prec prec = PREC_NOT_OPERATOR, new_prec, lookahead_prec;
5742  bool overloaded_p;
5743
5744  /* Parse the first expression.  */
5745  lhs = cp_parser_cast_expression (parser, /*address_p=*/false, cast_p);
5746  lhs_type = ERROR_MARK;
5747
5748  for (;;)
5749    {
5750      /* Get an operator token.  */
5751      token = cp_lexer_peek_token (parser->lexer);
5752
5753      new_prec = TOKEN_PRECEDENCE (token);
5754
5755      /* Popping an entry off the stack means we completed a subexpression:
5756	 - either we found a token which is not an operator (`>' where it is not
5757	   an operator, or prec == PREC_NOT_OPERATOR), in which case popping
5758	   will happen repeatedly;
5759	 - or, we found an operator which has lower priority.  This is the case
5760	   where the recursive descent *ascends*, as in `3 * 4 + 5' after
5761	   parsing `3 * 4'.  */
5762      if (new_prec <= prec)
5763	{
5764	  if (sp == stack)
5765	    break;
5766	  else
5767	    goto pop;
5768	}
5769
5770     get_rhs:
5771      tree_type = binops_by_token[token->type].tree_type;
5772
5773      /* We used the operator token.  */
5774      cp_lexer_consume_token (parser->lexer);
5775
5776      /* Extract another operand.  It may be the RHS of this expression
5777	 or the LHS of a new, higher priority expression.  */
5778      rhs = cp_parser_simple_cast_expression (parser);
5779      rhs_type = ERROR_MARK;
5780
5781      /* Get another operator token.  Look up its precedence to avoid
5782	 building a useless (immediately popped) stack entry for common
5783	 cases such as 3 + 4 + 5 or 3 * 4 + 5.  */
5784      token = cp_lexer_peek_token (parser->lexer);
5785      lookahead_prec = TOKEN_PRECEDENCE (token);
5786      if (lookahead_prec > new_prec)
5787	{
5788	  /* ... and prepare to parse the RHS of the new, higher priority
5789	     expression.  Since precedence levels on the stack are
5790	     monotonically increasing, we do not have to care about
5791	     stack overflows.  */
5792	  sp->prec = prec;
5793	  sp->tree_type = tree_type;
5794	  sp->lhs = lhs;
5795	  sp->lhs_type = lhs_type;
5796	  sp++;
5797	  lhs = rhs;
5798	  lhs_type = rhs_type;
5799	  prec = new_prec;
5800	  new_prec = lookahead_prec;
5801	  goto get_rhs;
5802
5803	 pop:
5804	  /* If the stack is not empty, we have parsed into LHS the right side
5805	     (`4' in the example above) of an expression we had suspended.
5806	     We can use the information on the stack to recover the LHS (`3')
5807	     from the stack together with the tree code (`MULT_EXPR'), and
5808	     the precedence of the higher level subexpression
5809	     (`PREC_ADDITIVE_EXPRESSION').  TOKEN is the CPP_PLUS token,
5810	     which will be used to actually build the additive expression.  */
5811	  --sp;
5812	  prec = sp->prec;
5813	  tree_type = sp->tree_type;
5814	  rhs = lhs;
5815	  rhs_type = lhs_type;
5816	  lhs = sp->lhs;
5817	  lhs_type = sp->lhs_type;
5818	}
5819
5820      overloaded_p = false;
5821      lhs = build_x_binary_op (tree_type, lhs, lhs_type, rhs, rhs_type,
5822			       &overloaded_p);
5823      lhs_type = tree_type;
5824
5825      /* If the binary operator required the use of an overloaded operator,
5826	 then this expression cannot be an integral constant-expression.
5827	 An overloaded operator can be used even if both operands are
5828	 otherwise permissible in an integral constant-expression if at
5829	 least one of the operands is of enumeration type.  */
5830
5831      if (overloaded_p
5832	  && (cp_parser_non_integral_constant_expression
5833	      (parser, "calls to overloaded operators")))
5834	return error_mark_node;
5835    }
5836
5837  return lhs;
5838}
5839
5840
5841/* Parse the `? expression : assignment-expression' part of a
5842   conditional-expression.  The LOGICAL_OR_EXPR is the
5843   logical-or-expression that started the conditional-expression.
5844   Returns a representation of the entire conditional-expression.
5845
5846   This routine is used by cp_parser_assignment_expression.
5847
5848     ? expression : assignment-expression
5849
5850   GNU Extensions:
5851
5852     ? : assignment-expression */
5853
5854static tree
5855cp_parser_question_colon_clause (cp_parser* parser, tree logical_or_expr)
5856{
5857  tree expr;
5858  tree assignment_expr;
5859
5860  /* Consume the `?' token.  */
5861  cp_lexer_consume_token (parser->lexer);
5862  if (cp_parser_allow_gnu_extensions_p (parser)
5863      && cp_lexer_next_token_is (parser->lexer, CPP_COLON))
5864    /* Implicit true clause.  */
5865    expr = NULL_TREE;
5866  else
5867    /* Parse the expression.  */
5868    expr = cp_parser_expression (parser, /*cast_p=*/false);
5869
5870  /* The next token should be a `:'.  */
5871  cp_parser_require (parser, CPP_COLON, "`:'");
5872  /* Parse the assignment-expression.  */
5873  assignment_expr = cp_parser_assignment_expression (parser, /*cast_p=*/false);
5874
5875  /* Build the conditional-expression.  */
5876  return build_x_conditional_expr (logical_or_expr,
5877				   expr,
5878				   assignment_expr);
5879}
5880
5881/* Parse an assignment-expression.
5882
5883   assignment-expression:
5884     conditional-expression
5885     logical-or-expression assignment-operator assignment_expression
5886     throw-expression
5887
5888   CAST_P is true if this expression is the target of a cast.
5889
5890   Returns a representation for the expression.  */
5891
5892static tree
5893cp_parser_assignment_expression (cp_parser* parser, bool cast_p)
5894{
5895  tree expr;
5896
5897  /* If the next token is the `throw' keyword, then we're looking at
5898     a throw-expression.  */
5899  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_THROW))
5900    expr = cp_parser_throw_expression (parser);
5901  /* Otherwise, it must be that we are looking at a
5902     logical-or-expression.  */
5903  else
5904    {
5905      /* Parse the binary expressions (logical-or-expression).  */
5906      expr = cp_parser_binary_expression (parser, cast_p);
5907      /* If the next token is a `?' then we're actually looking at a
5908	 conditional-expression.  */
5909      if (cp_lexer_next_token_is (parser->lexer, CPP_QUERY))
5910	return cp_parser_question_colon_clause (parser, expr);
5911      else
5912	{
5913	  enum tree_code assignment_operator;
5914
5915	  /* If it's an assignment-operator, we're using the second
5916	     production.  */
5917	  assignment_operator
5918	    = cp_parser_assignment_operator_opt (parser);
5919	  if (assignment_operator != ERROR_MARK)
5920	    {
5921	      tree rhs;
5922
5923	      /* Parse the right-hand side of the assignment.  */
5924	      rhs = cp_parser_assignment_expression (parser, cast_p);
5925	      /* An assignment may not appear in a
5926		 constant-expression.  */
5927	      if (cp_parser_non_integral_constant_expression (parser,
5928							      "an assignment"))
5929		return error_mark_node;
5930	      /* Build the assignment expression.  */
5931	      expr = build_x_modify_expr (expr,
5932					  assignment_operator,
5933					  rhs);
5934	    }
5935	}
5936    }
5937
5938  return expr;
5939}
5940
5941/* Parse an (optional) assignment-operator.
5942
5943   assignment-operator: one of
5944     = *= /= %= += -= >>= <<= &= ^= |=
5945
5946   GNU Extension:
5947
5948   assignment-operator: one of
5949     <?= >?=
5950
5951   If the next token is an assignment operator, the corresponding tree
5952   code is returned, and the token is consumed.  For example, for
5953   `+=', PLUS_EXPR is returned.  For `=' itself, the code returned is
5954   NOP_EXPR.  For `/', TRUNC_DIV_EXPR is returned; for `%',
5955   TRUNC_MOD_EXPR is returned.  If TOKEN is not an assignment
5956   operator, ERROR_MARK is returned.  */
5957
5958static enum tree_code
5959cp_parser_assignment_operator_opt (cp_parser* parser)
5960{
5961  enum tree_code op;
5962  cp_token *token;
5963
5964  /* Peek at the next toen.  */
5965  token = cp_lexer_peek_token (parser->lexer);
5966
5967  switch (token->type)
5968    {
5969    case CPP_EQ:
5970      op = NOP_EXPR;
5971      break;
5972
5973    case CPP_MULT_EQ:
5974      op = MULT_EXPR;
5975      break;
5976
5977    case CPP_DIV_EQ:
5978      op = TRUNC_DIV_EXPR;
5979      break;
5980
5981    case CPP_MOD_EQ:
5982      op = TRUNC_MOD_EXPR;
5983      break;
5984
5985    case CPP_PLUS_EQ:
5986      op = PLUS_EXPR;
5987      break;
5988
5989    case CPP_MINUS_EQ:
5990      op = MINUS_EXPR;
5991      break;
5992
5993    case CPP_RSHIFT_EQ:
5994      op = RSHIFT_EXPR;
5995      break;
5996
5997    case CPP_LSHIFT_EQ:
5998      op = LSHIFT_EXPR;
5999      break;
6000
6001    case CPP_AND_EQ:
6002      op = BIT_AND_EXPR;
6003      break;
6004
6005    case CPP_XOR_EQ:
6006      op = BIT_XOR_EXPR;
6007      break;
6008
6009    case CPP_OR_EQ:
6010      op = BIT_IOR_EXPR;
6011      break;
6012
6013    default:
6014      /* Nothing else is an assignment operator.  */
6015      op = ERROR_MARK;
6016    }
6017
6018  /* If it was an assignment operator, consume it.  */
6019  if (op != ERROR_MARK)
6020    cp_lexer_consume_token (parser->lexer);
6021
6022  return op;
6023}
6024
6025/* Parse an expression.
6026
6027   expression:
6028     assignment-expression
6029     expression , assignment-expression
6030
6031   CAST_P is true if this expression is the target of a cast.
6032
6033   Returns a representation of the expression.  */
6034
6035static tree
6036cp_parser_expression (cp_parser* parser, bool cast_p)
6037{
6038  tree expression = NULL_TREE;
6039
6040  while (true)
6041    {
6042      tree assignment_expression;
6043
6044      /* Parse the next assignment-expression.  */
6045      assignment_expression
6046	= cp_parser_assignment_expression (parser, cast_p);
6047      /* If this is the first assignment-expression, we can just
6048	 save it away.  */
6049      if (!expression)
6050	expression = assignment_expression;
6051      else
6052	expression = build_x_compound_expr (expression,
6053					    assignment_expression);
6054      /* If the next token is not a comma, then we are done with the
6055	 expression.  */
6056      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
6057	break;
6058      /* Consume the `,'.  */
6059      cp_lexer_consume_token (parser->lexer);
6060      /* A comma operator cannot appear in a constant-expression.  */
6061      if (cp_parser_non_integral_constant_expression (parser,
6062						      "a comma operator"))
6063	expression = error_mark_node;
6064    }
6065
6066  return expression;
6067}
6068
6069/* Parse a constant-expression.
6070
6071   constant-expression:
6072     conditional-expression
6073
6074  If ALLOW_NON_CONSTANT_P a non-constant expression is silently
6075  accepted.  If ALLOW_NON_CONSTANT_P is true and the expression is not
6076  constant, *NON_CONSTANT_P is set to TRUE.  If ALLOW_NON_CONSTANT_P
6077  is false, NON_CONSTANT_P should be NULL.  */
6078
6079static tree
6080cp_parser_constant_expression (cp_parser* parser,
6081			       bool allow_non_constant_p,
6082			       bool *non_constant_p)
6083{
6084  bool saved_integral_constant_expression_p;
6085  bool saved_allow_non_integral_constant_expression_p;
6086  bool saved_non_integral_constant_expression_p;
6087  tree expression;
6088
6089  /* It might seem that we could simply parse the
6090     conditional-expression, and then check to see if it were
6091     TREE_CONSTANT.  However, an expression that is TREE_CONSTANT is
6092     one that the compiler can figure out is constant, possibly after
6093     doing some simplifications or optimizations.  The standard has a
6094     precise definition of constant-expression, and we must honor
6095     that, even though it is somewhat more restrictive.
6096
6097     For example:
6098
6099       int i[(2, 3)];
6100
6101     is not a legal declaration, because `(2, 3)' is not a
6102     constant-expression.  The `,' operator is forbidden in a
6103     constant-expression.  However, GCC's constant-folding machinery
6104     will fold this operation to an INTEGER_CST for `3'.  */
6105
6106  /* Save the old settings.  */
6107  saved_integral_constant_expression_p = parser->integral_constant_expression_p;
6108  saved_allow_non_integral_constant_expression_p
6109    = parser->allow_non_integral_constant_expression_p;
6110  saved_non_integral_constant_expression_p = parser->non_integral_constant_expression_p;
6111  /* We are now parsing a constant-expression.  */
6112  parser->integral_constant_expression_p = true;
6113  parser->allow_non_integral_constant_expression_p = allow_non_constant_p;
6114  parser->non_integral_constant_expression_p = false;
6115  /* Although the grammar says "conditional-expression", we parse an
6116     "assignment-expression", which also permits "throw-expression"
6117     and the use of assignment operators.  In the case that
6118     ALLOW_NON_CONSTANT_P is false, we get better errors than we would
6119     otherwise.  In the case that ALLOW_NON_CONSTANT_P is true, it is
6120     actually essential that we look for an assignment-expression.
6121     For example, cp_parser_initializer_clauses uses this function to
6122     determine whether a particular assignment-expression is in fact
6123     constant.  */
6124  expression = cp_parser_assignment_expression (parser, /*cast_p=*/false);
6125  /* Restore the old settings.  */
6126  parser->integral_constant_expression_p
6127    = saved_integral_constant_expression_p;
6128  parser->allow_non_integral_constant_expression_p
6129    = saved_allow_non_integral_constant_expression_p;
6130  if (allow_non_constant_p)
6131    *non_constant_p = parser->non_integral_constant_expression_p;
6132  else if (parser->non_integral_constant_expression_p)
6133    expression = error_mark_node;
6134  parser->non_integral_constant_expression_p
6135    = saved_non_integral_constant_expression_p;
6136
6137  return expression;
6138}
6139
6140/* Parse __builtin_offsetof.
6141
6142   offsetof-expression:
6143     "__builtin_offsetof" "(" type-id "," offsetof-member-designator ")"
6144
6145   offsetof-member-designator:
6146     id-expression
6147     | offsetof-member-designator "." id-expression
6148     | offsetof-member-designator "[" expression "]"  */
6149
6150static tree
6151cp_parser_builtin_offsetof (cp_parser *parser)
6152{
6153  int save_ice_p, save_non_ice_p;
6154  tree type, expr;
6155  cp_id_kind dummy;
6156
6157  /* We're about to accept non-integral-constant things, but will
6158     definitely yield an integral constant expression.  Save and
6159     restore these values around our local parsing.  */
6160  save_ice_p = parser->integral_constant_expression_p;
6161  save_non_ice_p = parser->non_integral_constant_expression_p;
6162
6163  /* Consume the "__builtin_offsetof" token.  */
6164  cp_lexer_consume_token (parser->lexer);
6165  /* Consume the opening `('.  */
6166  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6167  /* Parse the type-id.  */
6168  type = cp_parser_type_id (parser);
6169  /* Look for the `,'.  */
6170  cp_parser_require (parser, CPP_COMMA, "`,'");
6171
6172  /* Build the (type *)null that begins the traditional offsetof macro.  */
6173  expr = build_static_cast (build_pointer_type (type), null_pointer_node);
6174
6175  /* Parse the offsetof-member-designator.  We begin as if we saw "expr->".  */
6176  expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DEREF, expr,
6177						 true, &dummy);
6178  while (true)
6179    {
6180      cp_token *token = cp_lexer_peek_token (parser->lexer);
6181      switch (token->type)
6182	{
6183	case CPP_OPEN_SQUARE:
6184	  /* offsetof-member-designator "[" expression "]" */
6185	  expr = cp_parser_postfix_open_square_expression (parser, expr, true);
6186	  break;
6187
6188	case CPP_DOT:
6189	  /* offsetof-member-designator "." identifier */
6190	  cp_lexer_consume_token (parser->lexer);
6191	  expr = cp_parser_postfix_dot_deref_expression (parser, CPP_DOT, expr,
6192							 true, &dummy);
6193	  break;
6194
6195	case CPP_CLOSE_PAREN:
6196	  /* Consume the ")" token.  */
6197	  cp_lexer_consume_token (parser->lexer);
6198	  goto success;
6199
6200	default:
6201	  /* Error.  We know the following require will fail, but
6202	     that gives the proper error message.  */
6203	  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6204	  cp_parser_skip_to_closing_parenthesis (parser, true, false, true);
6205	  expr = error_mark_node;
6206	  goto failure;
6207	}
6208    }
6209
6210 success:
6211  /* If we're processing a template, we can't finish the semantics yet.
6212     Otherwise we can fold the entire expression now.  */
6213  if (processing_template_decl)
6214    expr = build1 (OFFSETOF_EXPR, size_type_node, expr);
6215  else
6216    expr = finish_offsetof (expr);
6217
6218 failure:
6219  parser->integral_constant_expression_p = save_ice_p;
6220  parser->non_integral_constant_expression_p = save_non_ice_p;
6221
6222  return expr;
6223}
6224
6225/* Statements [gram.stmt.stmt]  */
6226
6227/* Parse a statement.
6228
6229   statement:
6230     labeled-statement
6231     expression-statement
6232     compound-statement
6233     selection-statement
6234     iteration-statement
6235     jump-statement
6236     declaration-statement
6237     try-block
6238
6239  IN_COMPOUND is true when the statement is nested inside a
6240  cp_parser_compound_statement; this matters for certain pragmas.
6241
6242  If IF_P is not NULL, *IF_P is set to indicate whether the statement
6243  is a (possibly labeled) if statement which is not enclosed in braces
6244  and has an else clause.  This is used to implement -Wparentheses.  */
6245
6246static void
6247cp_parser_statement (cp_parser* parser, tree in_statement_expr,
6248		     bool in_compound, bool *if_p)
6249{
6250  tree statement;
6251  cp_token *token;
6252  location_t statement_location;
6253
6254 restart:
6255  if (if_p != NULL)
6256    *if_p = false;
6257  /* There is no statement yet.  */
6258  statement = NULL_TREE;
6259  /* Peek at the next token.  */
6260  token = cp_lexer_peek_token (parser->lexer);
6261  /* Remember the location of the first token in the statement.  */
6262  statement_location = token->location;
6263  /* If this is a keyword, then that will often determine what kind of
6264     statement we have.  */
6265  if (token->type == CPP_KEYWORD)
6266    {
6267      enum rid keyword = token->keyword;
6268
6269      switch (keyword)
6270	{
6271	case RID_CASE:
6272	case RID_DEFAULT:
6273	  /* Looks like a labeled-statement with a case label.
6274	     Parse the label, and then use tail recursion to parse
6275	     the statement.  */
6276	  cp_parser_label_for_labeled_statement (parser);
6277	  goto restart;
6278
6279	case RID_IF:
6280	case RID_SWITCH:
6281	  statement = cp_parser_selection_statement (parser, if_p);
6282	  break;
6283
6284	case RID_WHILE:
6285	case RID_DO:
6286	case RID_FOR:
6287	  statement = cp_parser_iteration_statement (parser);
6288	  break;
6289
6290	case RID_BREAK:
6291	case RID_CONTINUE:
6292	case RID_RETURN:
6293	case RID_GOTO:
6294	  statement = cp_parser_jump_statement (parser);
6295	  break;
6296
6297	  /* Objective-C++ exception-handling constructs.  */
6298	case RID_AT_TRY:
6299	case RID_AT_CATCH:
6300	case RID_AT_FINALLY:
6301	case RID_AT_SYNCHRONIZED:
6302	case RID_AT_THROW:
6303	  statement = cp_parser_objc_statement (parser);
6304	  break;
6305
6306	case RID_TRY:
6307	  statement = cp_parser_try_block (parser);
6308	  break;
6309
6310	default:
6311	  /* It might be a keyword like `int' that can start a
6312	     declaration-statement.  */
6313	  break;
6314	}
6315    }
6316  else if (token->type == CPP_NAME)
6317    {
6318      /* If the next token is a `:', then we are looking at a
6319	 labeled-statement.  */
6320      token = cp_lexer_peek_nth_token (parser->lexer, 2);
6321      if (token->type == CPP_COLON)
6322	{
6323	  /* Looks like a labeled-statement with an ordinary label.
6324	     Parse the label, and then use tail recursion to parse
6325	     the statement.  */
6326	  cp_parser_label_for_labeled_statement (parser);
6327	  goto restart;
6328	}
6329    }
6330  /* Anything that starts with a `{' must be a compound-statement.  */
6331  else if (token->type == CPP_OPEN_BRACE)
6332    statement = cp_parser_compound_statement (parser, NULL, false);
6333  /* CPP_PRAGMA is a #pragma inside a function body, which constitutes
6334     a statement all its own.  */
6335  else if (token->type == CPP_PRAGMA)
6336    {
6337      /* Only certain OpenMP pragmas are attached to statements, and thus
6338	 are considered statements themselves.  All others are not.  In
6339	 the context of a compound, accept the pragma as a "statement" and
6340	 return so that we can check for a close brace.  Otherwise we
6341	 require a real statement and must go back and read one.  */
6342      if (in_compound)
6343	cp_parser_pragma (parser, pragma_compound);
6344      else if (!cp_parser_pragma (parser, pragma_stmt))
6345	goto restart;
6346      return;
6347    }
6348  else if (token->type == CPP_EOF)
6349    {
6350      cp_parser_error (parser, "expected statement");
6351      return;
6352    }
6353
6354  /* Everything else must be a declaration-statement or an
6355     expression-statement.  Try for the declaration-statement
6356     first, unless we are looking at a `;', in which case we know that
6357     we have an expression-statement.  */
6358  if (!statement)
6359    {
6360      if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6361	{
6362	  cp_parser_parse_tentatively (parser);
6363	  /* Try to parse the declaration-statement.  */
6364	  cp_parser_declaration_statement (parser);
6365	  /* If that worked, we're done.  */
6366	  if (cp_parser_parse_definitely (parser))
6367	    return;
6368	}
6369      /* Look for an expression-statement instead.  */
6370      statement = cp_parser_expression_statement (parser, in_statement_expr);
6371    }
6372
6373  /* Set the line number for the statement.  */
6374  if (statement && STATEMENT_CODE_P (TREE_CODE (statement)))
6375    SET_EXPR_LOCATION (statement, statement_location);
6376}
6377
6378/* Parse the label for a labeled-statement, i.e.
6379
6380   identifier :
6381   case constant-expression :
6382   default :
6383
6384   GNU Extension:
6385   case constant-expression ... constant-expression : statement
6386
6387   When a label is parsed without errors, the label is added to the
6388   parse tree by the finish_* functions, so this function doesn't
6389   have to return the label.  */
6390
6391static void
6392cp_parser_label_for_labeled_statement (cp_parser* parser)
6393{
6394  cp_token *token;
6395
6396  /* The next token should be an identifier.  */
6397  token = cp_lexer_peek_token (parser->lexer);
6398  if (token->type != CPP_NAME
6399      && token->type != CPP_KEYWORD)
6400    {
6401      cp_parser_error (parser, "expected labeled-statement");
6402      return;
6403    }
6404
6405  switch (token->keyword)
6406    {
6407    case RID_CASE:
6408      {
6409	tree expr, expr_hi;
6410	cp_token *ellipsis;
6411
6412	/* Consume the `case' token.  */
6413	cp_lexer_consume_token (parser->lexer);
6414	/* Parse the constant-expression.  */
6415	expr = cp_parser_constant_expression (parser,
6416					      /*allow_non_constant_p=*/false,
6417					      NULL);
6418
6419	ellipsis = cp_lexer_peek_token (parser->lexer);
6420	if (ellipsis->type == CPP_ELLIPSIS)
6421	  {
6422	    /* Consume the `...' token.  */
6423	    cp_lexer_consume_token (parser->lexer);
6424	    expr_hi =
6425	      cp_parser_constant_expression (parser,
6426					     /*allow_non_constant_p=*/false,
6427					     NULL);
6428	    /* We don't need to emit warnings here, as the common code
6429	       will do this for us.  */
6430	  }
6431	else
6432	  expr_hi = NULL_TREE;
6433
6434	if (parser->in_switch_statement_p)
6435	  finish_case_label (expr, expr_hi);
6436	else
6437	  error ("case label %qE not within a switch statement", expr);
6438      }
6439      break;
6440
6441    case RID_DEFAULT:
6442      /* Consume the `default' token.  */
6443      cp_lexer_consume_token (parser->lexer);
6444
6445      if (parser->in_switch_statement_p)
6446	finish_case_label (NULL_TREE, NULL_TREE);
6447      else
6448	error ("case label not within a switch statement");
6449      break;
6450
6451    default:
6452      /* Anything else must be an ordinary label.  */
6453      finish_label_stmt (cp_parser_identifier (parser));
6454      break;
6455    }
6456
6457  /* Require the `:' token.  */
6458  cp_parser_require (parser, CPP_COLON, "`:'");
6459}
6460
6461/* Parse an expression-statement.
6462
6463   expression-statement:
6464     expression [opt] ;
6465
6466   Returns the new EXPR_STMT -- or NULL_TREE if the expression
6467   statement consists of nothing more than an `;'. IN_STATEMENT_EXPR_P
6468   indicates whether this expression-statement is part of an
6469   expression statement.  */
6470
6471static tree
6472cp_parser_expression_statement (cp_parser* parser, tree in_statement_expr)
6473{
6474  tree statement = NULL_TREE;
6475
6476  /* If the next token is a ';', then there is no expression
6477     statement.  */
6478  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6479    statement = cp_parser_expression (parser, /*cast_p=*/false);
6480
6481  /* Consume the final `;'.  */
6482  cp_parser_consume_semicolon_at_end_of_statement (parser);
6483
6484  if (in_statement_expr
6485      && cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
6486    /* This is the final expression statement of a statement
6487       expression.  */
6488    statement = finish_stmt_expr_expr (statement, in_statement_expr);
6489  else if (statement)
6490    statement = finish_expr_stmt (statement);
6491  else
6492    finish_stmt ();
6493
6494  return statement;
6495}
6496
6497/* Parse a compound-statement.
6498
6499   compound-statement:
6500     { statement-seq [opt] }
6501
6502   Returns a tree representing the statement.  */
6503
6504static tree
6505cp_parser_compound_statement (cp_parser *parser, tree in_statement_expr,
6506			      bool in_try)
6507{
6508  tree compound_stmt;
6509
6510  /* Consume the `{'.  */
6511  if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
6512    return error_mark_node;
6513  /* Begin the compound-statement.  */
6514  compound_stmt = begin_compound_stmt (in_try ? BCS_TRY_BLOCK : 0);
6515  /* Parse an (optional) statement-seq.  */
6516  cp_parser_statement_seq_opt (parser, in_statement_expr);
6517  /* Finish the compound-statement.  */
6518  finish_compound_stmt (compound_stmt);
6519  /* Consume the `}'.  */
6520  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
6521
6522  return compound_stmt;
6523}
6524
6525/* Parse an (optional) statement-seq.
6526
6527   statement-seq:
6528     statement
6529     statement-seq [opt] statement  */
6530
6531static void
6532cp_parser_statement_seq_opt (cp_parser* parser, tree in_statement_expr)
6533{
6534  /* Scan statements until there aren't any more.  */
6535  while (true)
6536    {
6537      cp_token *token = cp_lexer_peek_token (parser->lexer);
6538
6539      /* If we're looking at a `}', then we've run out of statements.  */
6540      if (token->type == CPP_CLOSE_BRACE
6541	  || token->type == CPP_EOF
6542	  || token->type == CPP_PRAGMA_EOL)
6543	break;
6544
6545      /* Parse the statement.  */
6546      cp_parser_statement (parser, in_statement_expr, true, NULL);
6547    }
6548}
6549
6550/* Parse a selection-statement.
6551
6552   selection-statement:
6553     if ( condition ) statement
6554     if ( condition ) statement else statement
6555     switch ( condition ) statement
6556
6557   Returns the new IF_STMT or SWITCH_STMT.
6558
6559   If IF_P is not NULL, *IF_P is set to indicate whether the statement
6560   is a (possibly labeled) if statement which is not enclosed in
6561   braces and has an else clause.  This is used to implement
6562   -Wparentheses.  */
6563
6564static tree
6565cp_parser_selection_statement (cp_parser* parser, bool *if_p)
6566{
6567  cp_token *token;
6568  enum rid keyword;
6569
6570  if (if_p != NULL)
6571    *if_p = false;
6572
6573  /* Peek at the next token.  */
6574  token = cp_parser_require (parser, CPP_KEYWORD, "selection-statement");
6575
6576  /* See what kind of keyword it is.  */
6577  keyword = token->keyword;
6578  switch (keyword)
6579    {
6580    case RID_IF:
6581    case RID_SWITCH:
6582      {
6583	tree statement;
6584	tree condition;
6585
6586	/* Look for the `('.  */
6587	if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
6588	  {
6589	    cp_parser_skip_to_end_of_statement (parser);
6590	    return error_mark_node;
6591	  }
6592
6593	/* Begin the selection-statement.  */
6594	if (keyword == RID_IF)
6595	  statement = begin_if_stmt ();
6596	else
6597	  statement = begin_switch_stmt ();
6598
6599	/* Parse the condition.  */
6600	condition = cp_parser_condition (parser);
6601	/* Look for the `)'.  */
6602	if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
6603	  cp_parser_skip_to_closing_parenthesis (parser, true, false,
6604						 /*consume_paren=*/true);
6605
6606	if (keyword == RID_IF)
6607	  {
6608	    bool nested_if;
6609
6610	    /* Add the condition.  */
6611	    finish_if_stmt_cond (condition, statement);
6612
6613	    /* Parse the then-clause.  */
6614	    cp_parser_implicitly_scoped_statement (parser, &nested_if);
6615	    finish_then_clause (statement);
6616
6617	    /* If the next token is `else', parse the else-clause.  */
6618	    if (cp_lexer_next_token_is_keyword (parser->lexer,
6619						RID_ELSE))
6620	      {
6621		/* Consume the `else' keyword.  */
6622		cp_lexer_consume_token (parser->lexer);
6623		begin_else_clause (statement);
6624		/* Parse the else-clause.  */
6625		cp_parser_implicitly_scoped_statement (parser, NULL);
6626		finish_else_clause (statement);
6627
6628		/* If we are currently parsing a then-clause, then
6629		   IF_P will not be NULL.  We set it to true to
6630		   indicate that this if statement has an else clause.
6631		   This may trigger the Wparentheses warning below
6632		   when we get back up to the parent if statement.  */
6633		if (if_p != NULL)
6634		  *if_p = true;
6635	      }
6636	    else
6637	      {
6638		/* This if statement does not have an else clause.  If
6639		   NESTED_IF is true, then the then-clause is an if
6640		   statement which does have an else clause.  We warn
6641		   about the potential ambiguity.  */
6642		if (nested_if)
6643		  warning (OPT_Wparentheses,
6644			   ("%Hsuggest explicit braces "
6645			    "to avoid ambiguous %<else%>"),
6646			   EXPR_LOCUS (statement));
6647	      }
6648
6649	    /* Now we're all done with the if-statement.  */
6650	    finish_if_stmt (statement);
6651	  }
6652	else
6653	  {
6654	    bool in_switch_statement_p;
6655	    unsigned char in_statement;
6656
6657	    /* Add the condition.  */
6658	    finish_switch_cond (condition, statement);
6659
6660	    /* Parse the body of the switch-statement.  */
6661	    in_switch_statement_p = parser->in_switch_statement_p;
6662	    in_statement = parser->in_statement;
6663	    parser->in_switch_statement_p = true;
6664	    parser->in_statement |= IN_SWITCH_STMT;
6665	    cp_parser_implicitly_scoped_statement (parser, NULL);
6666	    parser->in_switch_statement_p = in_switch_statement_p;
6667	    parser->in_statement = in_statement;
6668
6669	    /* Now we're all done with the switch-statement.  */
6670	    finish_switch_stmt (statement);
6671	  }
6672
6673	return statement;
6674      }
6675      break;
6676
6677    default:
6678      cp_parser_error (parser, "expected selection-statement");
6679      return error_mark_node;
6680    }
6681}
6682
6683/* Parse a condition.
6684
6685   condition:
6686     expression
6687     type-specifier-seq declarator = assignment-expression
6688
6689   GNU Extension:
6690
6691   condition:
6692     type-specifier-seq declarator asm-specification [opt]
6693       attributes [opt] = assignment-expression
6694
6695   Returns the expression that should be tested.  */
6696
6697static tree
6698cp_parser_condition (cp_parser* parser)
6699{
6700  cp_decl_specifier_seq type_specifiers;
6701  const char *saved_message;
6702
6703  /* Try the declaration first.  */
6704  cp_parser_parse_tentatively (parser);
6705  /* New types are not allowed in the type-specifier-seq for a
6706     condition.  */
6707  saved_message = parser->type_definition_forbidden_message;
6708  parser->type_definition_forbidden_message
6709    = "types may not be defined in conditions";
6710  /* Parse the type-specifier-seq.  */
6711  cp_parser_type_specifier_seq (parser, /*is_condition==*/true,
6712				&type_specifiers);
6713  /* Restore the saved message.  */
6714  parser->type_definition_forbidden_message = saved_message;
6715  /* If all is well, we might be looking at a declaration.  */
6716  if (!cp_parser_error_occurred (parser))
6717    {
6718      tree decl;
6719      tree asm_specification;
6720      tree attributes;
6721      cp_declarator *declarator;
6722      tree initializer = NULL_TREE;
6723
6724      /* Parse the declarator.  */
6725      declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
6726					 /*ctor_dtor_or_conv_p=*/NULL,
6727					 /*parenthesized_p=*/NULL,
6728					 /*member_p=*/false);
6729      /* Parse the attributes.  */
6730      attributes = cp_parser_attributes_opt (parser);
6731      /* Parse the asm-specification.  */
6732      asm_specification = cp_parser_asm_specification_opt (parser);
6733      /* If the next token is not an `=', then we might still be
6734	 looking at an expression.  For example:
6735
6736	   if (A(a).x)
6737
6738	 looks like a decl-specifier-seq and a declarator -- but then
6739	 there is no `=', so this is an expression.  */
6740      cp_parser_require (parser, CPP_EQ, "`='");
6741      /* If we did see an `=', then we are looking at a declaration
6742	 for sure.  */
6743      if (cp_parser_parse_definitely (parser))
6744	{
6745	  tree pushed_scope;
6746	  bool non_constant_p;
6747
6748	  /* Create the declaration.  */
6749	  decl = start_decl (declarator, &type_specifiers,
6750			     /*initialized_p=*/true,
6751			     attributes, /*prefix_attributes=*/NULL_TREE,
6752			     &pushed_scope);
6753	  /* Parse the assignment-expression.  */
6754	  initializer
6755	    = cp_parser_constant_expression (parser,
6756					     /*allow_non_constant_p=*/true,
6757					     &non_constant_p);
6758	  if (!non_constant_p)
6759	    initializer = fold_non_dependent_expr (initializer);
6760
6761	  /* Process the initializer.  */
6762	  cp_finish_decl (decl,
6763			  initializer, !non_constant_p,
6764			  asm_specification,
6765			  LOOKUP_ONLYCONVERTING);
6766
6767	  if (pushed_scope)
6768	    pop_scope (pushed_scope);
6769
6770	  return convert_from_reference (decl);
6771	}
6772    }
6773  /* If we didn't even get past the declarator successfully, we are
6774     definitely not looking at a declaration.  */
6775  else
6776    cp_parser_abort_tentative_parse (parser);
6777
6778  /* Otherwise, we are looking at an expression.  */
6779  return cp_parser_expression (parser, /*cast_p=*/false);
6780}
6781
6782/* Parse an iteration-statement.
6783
6784   iteration-statement:
6785     while ( condition ) statement
6786     do statement while ( expression ) ;
6787     for ( for-init-statement condition [opt] ; expression [opt] )
6788       statement
6789
6790   Returns the new WHILE_STMT, DO_STMT, or FOR_STMT.  */
6791
6792static tree
6793cp_parser_iteration_statement (cp_parser* parser)
6794{
6795  cp_token *token;
6796  enum rid keyword;
6797  tree statement;
6798  unsigned char in_statement;
6799
6800  /* Peek at the next token.  */
6801  token = cp_parser_require (parser, CPP_KEYWORD, "iteration-statement");
6802  if (!token)
6803    return error_mark_node;
6804
6805  /* Remember whether or not we are already within an iteration
6806     statement.  */
6807  in_statement = parser->in_statement;
6808
6809  /* See what kind of keyword it is.  */
6810  keyword = token->keyword;
6811  switch (keyword)
6812    {
6813    case RID_WHILE:
6814      {
6815	tree condition;
6816
6817	/* Begin the while-statement.  */
6818	statement = begin_while_stmt ();
6819	/* Look for the `('.  */
6820	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6821	/* Parse the condition.  */
6822	condition = cp_parser_condition (parser);
6823	finish_while_stmt_cond (condition, statement);
6824	/* Look for the `)'.  */
6825	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6826	/* Parse the dependent statement.  */
6827	parser->in_statement = IN_ITERATION_STMT;
6828	cp_parser_already_scoped_statement (parser);
6829	parser->in_statement = in_statement;
6830	/* We're done with the while-statement.  */
6831	finish_while_stmt (statement);
6832      }
6833      break;
6834
6835    case RID_DO:
6836      {
6837	tree expression;
6838
6839	/* Begin the do-statement.  */
6840	statement = begin_do_stmt ();
6841	/* Parse the body of the do-statement.  */
6842	parser->in_statement = IN_ITERATION_STMT;
6843	cp_parser_implicitly_scoped_statement (parser, NULL);
6844	parser->in_statement = in_statement;
6845	finish_do_body (statement);
6846	/* Look for the `while' keyword.  */
6847	cp_parser_require_keyword (parser, RID_WHILE, "`while'");
6848	/* Look for the `('.  */
6849	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6850	/* Parse the expression.  */
6851	expression = cp_parser_expression (parser, /*cast_p=*/false);
6852	/* We're done with the do-statement.  */
6853	finish_do_stmt (expression, statement);
6854	/* Look for the `)'.  */
6855	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6856	/* Look for the `;'.  */
6857	cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6858      }
6859      break;
6860
6861    case RID_FOR:
6862      {
6863	tree condition = NULL_TREE;
6864	tree expression = NULL_TREE;
6865
6866	/* Begin the for-statement.  */
6867	statement = begin_for_stmt ();
6868	/* Look for the `('.  */
6869	cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
6870	/* Parse the initialization.  */
6871	cp_parser_for_init_statement (parser);
6872	finish_for_init_stmt (statement);
6873
6874	/* If there's a condition, process it.  */
6875	if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6876	  condition = cp_parser_condition (parser);
6877	finish_for_cond (condition, statement);
6878	/* Look for the `;'.  */
6879	cp_parser_require (parser, CPP_SEMICOLON, "`;'");
6880
6881	/* If there's an expression, process it.  */
6882	if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
6883	  expression = cp_parser_expression (parser, /*cast_p=*/false);
6884	finish_for_expr (expression, statement);
6885	/* Look for the `)'.  */
6886	cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
6887
6888	/* Parse the body of the for-statement.  */
6889	parser->in_statement = IN_ITERATION_STMT;
6890	cp_parser_already_scoped_statement (parser);
6891	parser->in_statement = in_statement;
6892
6893	/* We're done with the for-statement.  */
6894	finish_for_stmt (statement);
6895      }
6896      break;
6897
6898    default:
6899      cp_parser_error (parser, "expected iteration-statement");
6900      statement = error_mark_node;
6901      break;
6902    }
6903
6904  return statement;
6905}
6906
6907/* Parse a for-init-statement.
6908
6909   for-init-statement:
6910     expression-statement
6911     simple-declaration  */
6912
6913static void
6914cp_parser_for_init_statement (cp_parser* parser)
6915{
6916  /* If the next token is a `;', then we have an empty
6917     expression-statement.  Grammatically, this is also a
6918     simple-declaration, but an invalid one, because it does not
6919     declare anything.  Therefore, if we did not handle this case
6920     specially, we would issue an error message about an invalid
6921     declaration.  */
6922  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
6923    {
6924      /* We're going to speculatively look for a declaration, falling back
6925	 to an expression, if necessary.  */
6926      cp_parser_parse_tentatively (parser);
6927      /* Parse the declaration.  */
6928      cp_parser_simple_declaration (parser,
6929				    /*function_definition_allowed_p=*/false);
6930      /* If the tentative parse failed, then we shall need to look for an
6931	 expression-statement.  */
6932      if (cp_parser_parse_definitely (parser))
6933	return;
6934    }
6935
6936  cp_parser_expression_statement (parser, false);
6937}
6938
6939/* Parse a jump-statement.
6940
6941   jump-statement:
6942     break ;
6943     continue ;
6944     return expression [opt] ;
6945     goto identifier ;
6946
6947   GNU extension:
6948
6949   jump-statement:
6950     goto * expression ;
6951
6952   Returns the new BREAK_STMT, CONTINUE_STMT, RETURN_EXPR, or GOTO_EXPR.  */
6953
6954static tree
6955cp_parser_jump_statement (cp_parser* parser)
6956{
6957  tree statement = error_mark_node;
6958  cp_token *token;
6959  enum rid keyword;
6960
6961  /* Peek at the next token.  */
6962  token = cp_parser_require (parser, CPP_KEYWORD, "jump-statement");
6963  if (!token)
6964    return error_mark_node;
6965
6966  /* See what kind of keyword it is.  */
6967  keyword = token->keyword;
6968  switch (keyword)
6969    {
6970    case RID_BREAK:
6971      switch (parser->in_statement)
6972	{
6973	case 0:
6974	  error ("break statement not within loop or switch");
6975	  break;
6976	default:
6977	  gcc_assert ((parser->in_statement & IN_SWITCH_STMT)
6978		      || parser->in_statement == IN_ITERATION_STMT);
6979	  statement = finish_break_stmt ();
6980	  break;
6981	case IN_OMP_BLOCK:
6982	  error ("invalid exit from OpenMP structured block");
6983	  break;
6984	case IN_OMP_FOR:
6985	  error ("break statement used with OpenMP for loop");
6986	  break;
6987	}
6988      cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
6989      break;
6990
6991    case RID_CONTINUE:
6992      switch (parser->in_statement & ~IN_SWITCH_STMT)
6993	{
6994	case 0:
6995	  error ("continue statement not within a loop");
6996	  break;
6997	case IN_ITERATION_STMT:
6998	case IN_OMP_FOR:
6999	  statement = finish_continue_stmt ();
7000	  break;
7001	case IN_OMP_BLOCK:
7002	  error ("invalid exit from OpenMP structured block");
7003	  break;
7004	default:
7005	  gcc_unreachable ();
7006	}
7007      cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7008      break;
7009
7010    case RID_RETURN:
7011      {
7012	tree expr;
7013
7014	/* If the next token is a `;', then there is no
7015	   expression.  */
7016	if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
7017	  expr = cp_parser_expression (parser, /*cast_p=*/false);
7018	else
7019	  expr = NULL_TREE;
7020	/* Build the return-statement.  */
7021	statement = finish_return_stmt (expr);
7022	/* Look for the final `;'.  */
7023	cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7024      }
7025      break;
7026
7027    case RID_GOTO:
7028      /* Create the goto-statement.  */
7029      if (cp_lexer_next_token_is (parser->lexer, CPP_MULT))
7030	{
7031	  /* Issue a warning about this use of a GNU extension.  */
7032	  if (pedantic)
7033	    pedwarn ("ISO C++ forbids computed gotos");
7034	  /* Consume the '*' token.  */
7035	  cp_lexer_consume_token (parser->lexer);
7036	  /* Parse the dependent expression.  */
7037	  finish_goto_stmt (cp_parser_expression (parser, /*cast_p=*/false));
7038	}
7039      else
7040	finish_goto_stmt (cp_parser_identifier (parser));
7041      /* Look for the final `;'.  */
7042      cp_parser_require (parser, CPP_SEMICOLON, "%<;%>");
7043      break;
7044
7045    default:
7046      cp_parser_error (parser, "expected jump-statement");
7047      break;
7048    }
7049
7050  return statement;
7051}
7052
7053/* Parse a declaration-statement.
7054
7055   declaration-statement:
7056     block-declaration  */
7057
7058static void
7059cp_parser_declaration_statement (cp_parser* parser)
7060{
7061  void *p;
7062
7063  /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7064  p = obstack_alloc (&declarator_obstack, 0);
7065
7066 /* Parse the block-declaration.  */
7067  cp_parser_block_declaration (parser, /*statement_p=*/true);
7068
7069  /* Free any declarators allocated.  */
7070  obstack_free (&declarator_obstack, p);
7071
7072  /* Finish off the statement.  */
7073  finish_stmt ();
7074}
7075
7076/* Some dependent statements (like `if (cond) statement'), are
7077   implicitly in their own scope.  In other words, if the statement is
7078   a single statement (as opposed to a compound-statement), it is
7079   none-the-less treated as if it were enclosed in braces.  Any
7080   declarations appearing in the dependent statement are out of scope
7081   after control passes that point.  This function parses a statement,
7082   but ensures that is in its own scope, even if it is not a
7083   compound-statement.
7084
7085   If IF_P is not NULL, *IF_P is set to indicate whether the statement
7086   is a (possibly labeled) if statement which is not enclosed in
7087   braces and has an else clause.  This is used to implement
7088   -Wparentheses.
7089
7090   Returns the new statement.  */
7091
7092static tree
7093cp_parser_implicitly_scoped_statement (cp_parser* parser, bool *if_p)
7094{
7095  tree statement;
7096
7097  if (if_p != NULL)
7098    *if_p = false;
7099
7100  /* Mark if () ; with a special NOP_EXPR.  */
7101  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7102    {
7103      cp_lexer_consume_token (parser->lexer);
7104      statement = add_stmt (build_empty_stmt ());
7105    }
7106  /* if a compound is opened, we simply parse the statement directly.  */
7107  else if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7108    statement = cp_parser_compound_statement (parser, NULL, false);
7109  /* If the token is not a `{', then we must take special action.  */
7110  else
7111    {
7112      /* Create a compound-statement.  */
7113      statement = begin_compound_stmt (0);
7114      /* Parse the dependent-statement.  */
7115      cp_parser_statement (parser, NULL_TREE, false, if_p);
7116      /* Finish the dummy compound-statement.  */
7117      finish_compound_stmt (statement);
7118    }
7119
7120  /* Return the statement.  */
7121  return statement;
7122}
7123
7124/* For some dependent statements (like `while (cond) statement'), we
7125   have already created a scope.  Therefore, even if the dependent
7126   statement is a compound-statement, we do not want to create another
7127   scope.  */
7128
7129static void
7130cp_parser_already_scoped_statement (cp_parser* parser)
7131{
7132  /* If the token is a `{', then we must take special action.  */
7133  if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
7134    cp_parser_statement (parser, NULL_TREE, false, NULL);
7135  else
7136    {
7137      /* Avoid calling cp_parser_compound_statement, so that we
7138	 don't create a new scope.  Do everything else by hand.  */
7139      cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
7140      cp_parser_statement_seq_opt (parser, NULL_TREE);
7141      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7142    }
7143}
7144
7145/* Declarations [gram.dcl.dcl] */
7146
7147/* Parse an optional declaration-sequence.
7148
7149   declaration-seq:
7150     declaration
7151     declaration-seq declaration  */
7152
7153static void
7154cp_parser_declaration_seq_opt (cp_parser* parser)
7155{
7156  while (true)
7157    {
7158      cp_token *token;
7159
7160      token = cp_lexer_peek_token (parser->lexer);
7161
7162      if (token->type == CPP_CLOSE_BRACE
7163	  || token->type == CPP_EOF
7164	  || token->type == CPP_PRAGMA_EOL)
7165	break;
7166
7167      if (token->type == CPP_SEMICOLON)
7168	{
7169	  /* A declaration consisting of a single semicolon is
7170	     invalid.  Allow it unless we're being pedantic.  */
7171	  cp_lexer_consume_token (parser->lexer);
7172	  if (pedantic && !in_system_header)
7173	    pedwarn ("extra %<;%>");
7174	  continue;
7175	}
7176
7177      /* If we're entering or exiting a region that's implicitly
7178	 extern "C", modify the lang context appropriately.  */
7179      if (!parser->implicit_extern_c && token->implicit_extern_c)
7180	{
7181	  push_lang_context (lang_name_c);
7182	  parser->implicit_extern_c = true;
7183	}
7184      else if (parser->implicit_extern_c && !token->implicit_extern_c)
7185	{
7186	  pop_lang_context ();
7187	  parser->implicit_extern_c = false;
7188	}
7189
7190      if (token->type == CPP_PRAGMA)
7191	{
7192	  /* A top-level declaration can consist solely of a #pragma.
7193	     A nested declaration cannot, so this is done here and not
7194	     in cp_parser_declaration.  (A #pragma at block scope is
7195	     handled in cp_parser_statement.)  */
7196	  cp_parser_pragma (parser, pragma_external);
7197	  continue;
7198	}
7199
7200      /* Parse the declaration itself.  */
7201      cp_parser_declaration (parser);
7202    }
7203}
7204
7205/* Parse a declaration.
7206
7207   declaration:
7208     block-declaration
7209     function-definition
7210     template-declaration
7211     explicit-instantiation
7212     explicit-specialization
7213     linkage-specification
7214     namespace-definition
7215
7216   GNU extension:
7217
7218   declaration:
7219      __extension__ declaration */
7220
7221static void
7222cp_parser_declaration (cp_parser* parser)
7223{
7224  cp_token token1;
7225  cp_token token2;
7226  int saved_pedantic;
7227  void *p;
7228
7229  /* Check for the `__extension__' keyword.  */
7230  if (cp_parser_extension_opt (parser, &saved_pedantic))
7231    {
7232      /* Parse the qualified declaration.  */
7233      cp_parser_declaration (parser);
7234      /* Restore the PEDANTIC flag.  */
7235      pedantic = saved_pedantic;
7236
7237      return;
7238    }
7239
7240  /* Try to figure out what kind of declaration is present.  */
7241  token1 = *cp_lexer_peek_token (parser->lexer);
7242
7243  if (token1.type != CPP_EOF)
7244    token2 = *cp_lexer_peek_nth_token (parser->lexer, 2);
7245  else
7246    {
7247      token2.type = CPP_EOF;
7248      token2.keyword = RID_MAX;
7249    }
7250
7251  /* Get the high-water mark for the DECLARATOR_OBSTACK.  */
7252  p = obstack_alloc (&declarator_obstack, 0);
7253
7254  /* If the next token is `extern' and the following token is a string
7255     literal, then we have a linkage specification.  */
7256  if (token1.keyword == RID_EXTERN
7257      && cp_parser_is_string_literal (&token2))
7258    cp_parser_linkage_specification (parser);
7259  /* If the next token is `template', then we have either a template
7260     declaration, an explicit instantiation, or an explicit
7261     specialization.  */
7262  else if (token1.keyword == RID_TEMPLATE)
7263    {
7264      /* `template <>' indicates a template specialization.  */
7265      if (token2.type == CPP_LESS
7266	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
7267	cp_parser_explicit_specialization (parser);
7268      /* `template <' indicates a template declaration.  */
7269      else if (token2.type == CPP_LESS)
7270	cp_parser_template_declaration (parser, /*member_p=*/false);
7271      /* Anything else must be an explicit instantiation.  */
7272      else
7273	cp_parser_explicit_instantiation (parser);
7274    }
7275  /* If the next token is `export', then we have a template
7276     declaration.  */
7277  else if (token1.keyword == RID_EXPORT)
7278    cp_parser_template_declaration (parser, /*member_p=*/false);
7279  /* If the next token is `extern', 'static' or 'inline' and the one
7280     after that is `template', we have a GNU extended explicit
7281     instantiation directive.  */
7282  else if (cp_parser_allow_gnu_extensions_p (parser)
7283	   && (token1.keyword == RID_EXTERN
7284	       || token1.keyword == RID_STATIC
7285	       || token1.keyword == RID_INLINE)
7286	   && token2.keyword == RID_TEMPLATE)
7287    cp_parser_explicit_instantiation (parser);
7288  /* If the next token is `namespace', check for a named or unnamed
7289     namespace definition.  */
7290  else if (token1.keyword == RID_NAMESPACE
7291	   && (/* A named namespace definition.  */
7292	       (token2.type == CPP_NAME
7293		&& (cp_lexer_peek_nth_token (parser->lexer, 3)->type
7294		    != CPP_EQ))
7295	       /* An unnamed namespace definition.  */
7296	       || token2.type == CPP_OPEN_BRACE
7297	       || token2.keyword == RID_ATTRIBUTE))
7298    cp_parser_namespace_definition (parser);
7299  /* Objective-C++ declaration/definition.  */
7300  else if (c_dialect_objc () && OBJC_IS_AT_KEYWORD (token1.keyword))
7301    cp_parser_objc_declaration (parser);
7302  /* We must have either a block declaration or a function
7303     definition.  */
7304  else
7305    /* Try to parse a block-declaration, or a function-definition.  */
7306    cp_parser_block_declaration (parser, /*statement_p=*/false);
7307
7308  /* Free any declarators allocated.  */
7309  obstack_free (&declarator_obstack, p);
7310}
7311
7312/* Parse a block-declaration.
7313
7314   block-declaration:
7315     simple-declaration
7316     asm-definition
7317     namespace-alias-definition
7318     using-declaration
7319     using-directive
7320
7321   GNU Extension:
7322
7323   block-declaration:
7324     __extension__ block-declaration
7325     label-declaration
7326
7327   If STATEMENT_P is TRUE, then this block-declaration is occurring as
7328   part of a declaration-statement.  */
7329
7330static void
7331cp_parser_block_declaration (cp_parser *parser,
7332			     bool      statement_p)
7333{
7334  cp_token *token1;
7335  int saved_pedantic;
7336
7337  /* Check for the `__extension__' keyword.  */
7338  if (cp_parser_extension_opt (parser, &saved_pedantic))
7339    {
7340      /* Parse the qualified declaration.  */
7341      cp_parser_block_declaration (parser, statement_p);
7342      /* Restore the PEDANTIC flag.  */
7343      pedantic = saved_pedantic;
7344
7345      return;
7346    }
7347
7348  /* Peek at the next token to figure out which kind of declaration is
7349     present.  */
7350  token1 = cp_lexer_peek_token (parser->lexer);
7351
7352  /* If the next keyword is `asm', we have an asm-definition.  */
7353  if (token1->keyword == RID_ASM)
7354    {
7355      if (statement_p)
7356	cp_parser_commit_to_tentative_parse (parser);
7357      cp_parser_asm_definition (parser);
7358    }
7359  /* If the next keyword is `namespace', we have a
7360     namespace-alias-definition.  */
7361  else if (token1->keyword == RID_NAMESPACE)
7362    cp_parser_namespace_alias_definition (parser);
7363  /* If the next keyword is `using', we have either a
7364     using-declaration or a using-directive.  */
7365  else if (token1->keyword == RID_USING)
7366    {
7367      cp_token *token2;
7368
7369      if (statement_p)
7370	cp_parser_commit_to_tentative_parse (parser);
7371      /* If the token after `using' is `namespace', then we have a
7372	 using-directive.  */
7373      token2 = cp_lexer_peek_nth_token (parser->lexer, 2);
7374      if (token2->keyword == RID_NAMESPACE)
7375	cp_parser_using_directive (parser);
7376      /* Otherwise, it's a using-declaration.  */
7377      else
7378	cp_parser_using_declaration (parser,
7379				     /*access_declaration_p=*/false);
7380    }
7381  /* If the next keyword is `__label__' we have a label declaration.  */
7382  else if (token1->keyword == RID_LABEL)
7383    {
7384      if (statement_p)
7385	cp_parser_commit_to_tentative_parse (parser);
7386      cp_parser_label_declaration (parser);
7387    }
7388  /* Anything else must be a simple-declaration.  */
7389  else
7390    cp_parser_simple_declaration (parser, !statement_p);
7391}
7392
7393/* Parse a simple-declaration.
7394
7395   simple-declaration:
7396     decl-specifier-seq [opt] init-declarator-list [opt] ;
7397
7398   init-declarator-list:
7399     init-declarator
7400     init-declarator-list , init-declarator
7401
7402   If FUNCTION_DEFINITION_ALLOWED_P is TRUE, then we also recognize a
7403   function-definition as a simple-declaration.  */
7404
7405static void
7406cp_parser_simple_declaration (cp_parser* parser,
7407			      bool function_definition_allowed_p)
7408{
7409  cp_decl_specifier_seq decl_specifiers;
7410  int declares_class_or_enum;
7411  bool saw_declarator;
7412
7413  /* Defer access checks until we know what is being declared; the
7414     checks for names appearing in the decl-specifier-seq should be
7415     done as if we were in the scope of the thing being declared.  */
7416  push_deferring_access_checks (dk_deferred);
7417
7418  /* Parse the decl-specifier-seq.  We have to keep track of whether
7419     or not the decl-specifier-seq declares a named class or
7420     enumeration type, since that is the only case in which the
7421     init-declarator-list is allowed to be empty.
7422
7423     [dcl.dcl]
7424
7425     In a simple-declaration, the optional init-declarator-list can be
7426     omitted only when declaring a class or enumeration, that is when
7427     the decl-specifier-seq contains either a class-specifier, an
7428     elaborated-type-specifier, or an enum-specifier.  */
7429  cp_parser_decl_specifier_seq (parser,
7430				CP_PARSER_FLAGS_OPTIONAL,
7431				&decl_specifiers,
7432				&declares_class_or_enum);
7433  /* We no longer need to defer access checks.  */
7434  stop_deferring_access_checks ();
7435
7436  /* In a block scope, a valid declaration must always have a
7437     decl-specifier-seq.  By not trying to parse declarators, we can
7438     resolve the declaration/expression ambiguity more quickly.  */
7439  if (!function_definition_allowed_p
7440      && !decl_specifiers.any_specifiers_p)
7441    {
7442      cp_parser_error (parser, "expected declaration");
7443      goto done;
7444    }
7445
7446  /* If the next two tokens are both identifiers, the code is
7447     erroneous. The usual cause of this situation is code like:
7448
7449       T t;
7450
7451     where "T" should name a type -- but does not.  */
7452  if (!decl_specifiers.type
7453      && cp_parser_parse_and_diagnose_invalid_type_name (parser))
7454    {
7455      /* If parsing tentatively, we should commit; we really are
7456	 looking at a declaration.  */
7457      cp_parser_commit_to_tentative_parse (parser);
7458      /* Give up.  */
7459      goto done;
7460    }
7461
7462  /* If we have seen at least one decl-specifier, and the next token
7463     is not a parenthesis, then we must be looking at a declaration.
7464     (After "int (" we might be looking at a functional cast.)  */
7465  if (decl_specifiers.any_specifiers_p
7466      && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
7467    cp_parser_commit_to_tentative_parse (parser);
7468
7469  /* Keep going until we hit the `;' at the end of the simple
7470     declaration.  */
7471  saw_declarator = false;
7472  while (cp_lexer_next_token_is_not (parser->lexer,
7473				     CPP_SEMICOLON))
7474    {
7475      cp_token *token;
7476      bool function_definition_p;
7477      tree decl;
7478
7479      if (saw_declarator)
7480	{
7481	  /* If we are processing next declarator, coma is expected */
7482	  token = cp_lexer_peek_token (parser->lexer);
7483	  gcc_assert (token->type == CPP_COMMA);
7484	  cp_lexer_consume_token (parser->lexer);
7485	}
7486      else
7487	saw_declarator = true;
7488
7489      /* Parse the init-declarator.  */
7490      decl = cp_parser_init_declarator (parser, &decl_specifiers,
7491					/*checks=*/NULL,
7492					function_definition_allowed_p,
7493					/*member_p=*/false,
7494					declares_class_or_enum,
7495					&function_definition_p);
7496      /* If an error occurred while parsing tentatively, exit quickly.
7497	 (That usually happens when in the body of a function; each
7498	 statement is treated as a declaration-statement until proven
7499	 otherwise.)  */
7500      if (cp_parser_error_occurred (parser))
7501	goto done;
7502      /* Handle function definitions specially.  */
7503      if (function_definition_p)
7504	{
7505	  /* If the next token is a `,', then we are probably
7506	     processing something like:
7507
7508	       void f() {}, *p;
7509
7510	     which is erroneous.  */
7511	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
7512	    error ("mixing declarations and function-definitions is forbidden");
7513	  /* Otherwise, we're done with the list of declarators.  */
7514	  else
7515	    {
7516	      pop_deferring_access_checks ();
7517	      return;
7518	    }
7519	}
7520      /* The next token should be either a `,' or a `;'.  */
7521      token = cp_lexer_peek_token (parser->lexer);
7522      /* If it's a `,', there are more declarators to come.  */
7523      if (token->type == CPP_COMMA)
7524	/* will be consumed next time around */;
7525      /* If it's a `;', we are done.  */
7526      else if (token->type == CPP_SEMICOLON)
7527	break;
7528      /* Anything else is an error.  */
7529      else
7530	{
7531	  /* If we have already issued an error message we don't need
7532	     to issue another one.  */
7533	  if (decl != error_mark_node
7534	      || cp_parser_uncommitted_to_tentative_parse_p (parser))
7535	    cp_parser_error (parser, "expected %<,%> or %<;%>");
7536	  /* Skip tokens until we reach the end of the statement.  */
7537	  cp_parser_skip_to_end_of_statement (parser);
7538	  /* If the next token is now a `;', consume it.  */
7539	  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
7540	    cp_lexer_consume_token (parser->lexer);
7541	  goto done;
7542	}
7543      /* After the first time around, a function-definition is not
7544	 allowed -- even if it was OK at first.  For example:
7545
7546	   int i, f() {}
7547
7548	 is not valid.  */
7549      function_definition_allowed_p = false;
7550    }
7551
7552  /* Issue an error message if no declarators are present, and the
7553     decl-specifier-seq does not itself declare a class or
7554     enumeration.  */
7555  if (!saw_declarator)
7556    {
7557      if (cp_parser_declares_only_class_p (parser))
7558	shadow_tag (&decl_specifiers);
7559      /* Perform any deferred access checks.  */
7560      perform_deferred_access_checks ();
7561    }
7562
7563  /* Consume the `;'.  */
7564  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
7565
7566 done:
7567  pop_deferring_access_checks ();
7568}
7569
7570/* Parse a decl-specifier-seq.
7571
7572   decl-specifier-seq:
7573     decl-specifier-seq [opt] decl-specifier
7574
7575   decl-specifier:
7576     storage-class-specifier
7577     type-specifier
7578     function-specifier
7579     friend
7580     typedef
7581
7582   GNU Extension:
7583
7584   decl-specifier:
7585     attributes
7586
7587   Set *DECL_SPECS to a representation of the decl-specifier-seq.
7588
7589   The parser flags FLAGS is used to control type-specifier parsing.
7590
7591   *DECLARES_CLASS_OR_ENUM is set to the bitwise or of the following
7592   flags:
7593
7594     1: one of the decl-specifiers is an elaborated-type-specifier
7595	(i.e., a type declaration)
7596     2: one of the decl-specifiers is an enum-specifier or a
7597	class-specifier (i.e., a type definition)
7598
7599   */
7600
7601static void
7602cp_parser_decl_specifier_seq (cp_parser* parser,
7603			      cp_parser_flags flags,
7604			      cp_decl_specifier_seq *decl_specs,
7605			      int* declares_class_or_enum)
7606{
7607  bool constructor_possible_p = !parser->in_declarator_p;
7608
7609  /* Clear DECL_SPECS.  */
7610  clear_decl_specs (decl_specs);
7611
7612  /* Assume no class or enumeration type is declared.  */
7613  *declares_class_or_enum = 0;
7614
7615  /* Keep reading specifiers until there are no more to read.  */
7616  while (true)
7617    {
7618      bool constructor_p;
7619      bool found_decl_spec;
7620      cp_token *token;
7621
7622      /* Peek at the next token.  */
7623      token = cp_lexer_peek_token (parser->lexer);
7624      /* Handle attributes.  */
7625      if (token->keyword == RID_ATTRIBUTE)
7626	{
7627	  /* Parse the attributes.  */
7628	  decl_specs->attributes
7629	    = chainon (decl_specs->attributes,
7630		       cp_parser_attributes_opt (parser));
7631	  continue;
7632	}
7633      /* Assume we will find a decl-specifier keyword.  */
7634      found_decl_spec = true;
7635      /* If the next token is an appropriate keyword, we can simply
7636	 add it to the list.  */
7637      switch (token->keyword)
7638	{
7639	  /* decl-specifier:
7640	       friend  */
7641	case RID_FRIEND:
7642	  if (!at_class_scope_p ())
7643	    {
7644	      error ("%<friend%> used outside of class");
7645	      cp_lexer_purge_token (parser->lexer);
7646	    }
7647	  else
7648	    {
7649	      ++decl_specs->specs[(int) ds_friend];
7650	      /* Consume the token.  */
7651	      cp_lexer_consume_token (parser->lexer);
7652	    }
7653	  break;
7654
7655	  /* function-specifier:
7656	       inline
7657	       virtual
7658	       explicit  */
7659	case RID_INLINE:
7660	case RID_VIRTUAL:
7661	case RID_EXPLICIT:
7662	  cp_parser_function_specifier_opt (parser, decl_specs);
7663	  break;
7664
7665	  /* decl-specifier:
7666	       typedef  */
7667	case RID_TYPEDEF:
7668	  ++decl_specs->specs[(int) ds_typedef];
7669	  /* Consume the token.  */
7670	  cp_lexer_consume_token (parser->lexer);
7671	  /* A constructor declarator cannot appear in a typedef.  */
7672	  constructor_possible_p = false;
7673	  /* The "typedef" keyword can only occur in a declaration; we
7674	     may as well commit at this point.  */
7675	  cp_parser_commit_to_tentative_parse (parser);
7676
7677          if (decl_specs->storage_class != sc_none)
7678            decl_specs->conflicting_specifiers_p = true;
7679	  break;
7680
7681	  /* storage-class-specifier:
7682	       auto
7683	       register
7684	       static
7685	       extern
7686	       mutable
7687
7688	     GNU Extension:
7689	       thread  */
7690	case RID_AUTO:
7691	case RID_REGISTER:
7692	case RID_STATIC:
7693	case RID_EXTERN:
7694	case RID_MUTABLE:
7695	  /* Consume the token.  */
7696	  cp_lexer_consume_token (parser->lexer);
7697	  cp_parser_set_storage_class (parser, decl_specs, token->keyword);
7698	  break;
7699	case RID_THREAD:
7700	  /* Consume the token.  */
7701	  cp_lexer_consume_token (parser->lexer);
7702	  ++decl_specs->specs[(int) ds_thread];
7703	  break;
7704
7705	default:
7706	  /* We did not yet find a decl-specifier yet.  */
7707	  found_decl_spec = false;
7708	  break;
7709	}
7710
7711      /* Constructors are a special case.  The `S' in `S()' is not a
7712	 decl-specifier; it is the beginning of the declarator.  */
7713      constructor_p
7714	= (!found_decl_spec
7715	   && constructor_possible_p
7716	   && (cp_parser_constructor_declarator_p
7717	       (parser, decl_specs->specs[(int) ds_friend] != 0)));
7718
7719      /* If we don't have a DECL_SPEC yet, then we must be looking at
7720	 a type-specifier.  */
7721      if (!found_decl_spec && !constructor_p)
7722	{
7723	  int decl_spec_declares_class_or_enum;
7724	  bool is_cv_qualifier;
7725	  tree type_spec;
7726
7727	  type_spec
7728	    = cp_parser_type_specifier (parser, flags,
7729					decl_specs,
7730					/*is_declaration=*/true,
7731					&decl_spec_declares_class_or_enum,
7732					&is_cv_qualifier);
7733
7734	  *declares_class_or_enum |= decl_spec_declares_class_or_enum;
7735
7736	  /* If this type-specifier referenced a user-defined type
7737	     (a typedef, class-name, etc.), then we can't allow any
7738	     more such type-specifiers henceforth.
7739
7740	     [dcl.spec]
7741
7742	     The longest sequence of decl-specifiers that could
7743	     possibly be a type name is taken as the
7744	     decl-specifier-seq of a declaration.  The sequence shall
7745	     be self-consistent as described below.
7746
7747	     [dcl.type]
7748
7749	     As a general rule, at most one type-specifier is allowed
7750	     in the complete decl-specifier-seq of a declaration.  The
7751	     only exceptions are the following:
7752
7753	     -- const or volatile can be combined with any other
7754		type-specifier.
7755
7756	     -- signed or unsigned can be combined with char, long,
7757		short, or int.
7758
7759	     -- ..
7760
7761	     Example:
7762
7763	       typedef char* Pc;
7764	       void g (const int Pc);
7765
7766	     Here, Pc is *not* part of the decl-specifier seq; it's
7767	     the declarator.  Therefore, once we see a type-specifier
7768	     (other than a cv-qualifier), we forbid any additional
7769	     user-defined types.  We *do* still allow things like `int
7770	     int' to be considered a decl-specifier-seq, and issue the
7771	     error message later.  */
7772	  if (type_spec && !is_cv_qualifier)
7773	    flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
7774	  /* A constructor declarator cannot follow a type-specifier.  */
7775	  if (type_spec)
7776	    {
7777	      constructor_possible_p = false;
7778	      found_decl_spec = true;
7779	    }
7780	}
7781
7782      /* If we still do not have a DECL_SPEC, then there are no more
7783	 decl-specifiers.  */
7784      if (!found_decl_spec)
7785	break;
7786
7787      decl_specs->any_specifiers_p = true;
7788      /* After we see one decl-specifier, further decl-specifiers are
7789	 always optional.  */
7790      flags |= CP_PARSER_FLAGS_OPTIONAL;
7791    }
7792
7793  cp_parser_check_decl_spec (decl_specs);
7794
7795  /* Don't allow a friend specifier with a class definition.  */
7796  if (decl_specs->specs[(int) ds_friend] != 0
7797      && (*declares_class_or_enum & 2))
7798    error ("class definition may not be declared a friend");
7799}
7800
7801/* Parse an (optional) storage-class-specifier.
7802
7803   storage-class-specifier:
7804     auto
7805     register
7806     static
7807     extern
7808     mutable
7809
7810   GNU Extension:
7811
7812   storage-class-specifier:
7813     thread
7814
7815   Returns an IDENTIFIER_NODE corresponding to the keyword used.  */
7816
7817static tree
7818cp_parser_storage_class_specifier_opt (cp_parser* parser)
7819{
7820  switch (cp_lexer_peek_token (parser->lexer)->keyword)
7821    {
7822    case RID_AUTO:
7823    case RID_REGISTER:
7824    case RID_STATIC:
7825    case RID_EXTERN:
7826    case RID_MUTABLE:
7827    case RID_THREAD:
7828      /* Consume the token.  */
7829      return cp_lexer_consume_token (parser->lexer)->u.value;
7830
7831    default:
7832      return NULL_TREE;
7833    }
7834}
7835
7836/* Parse an (optional) function-specifier.
7837
7838   function-specifier:
7839     inline
7840     virtual
7841     explicit
7842
7843   Returns an IDENTIFIER_NODE corresponding to the keyword used.
7844   Updates DECL_SPECS, if it is non-NULL.  */
7845
7846static tree
7847cp_parser_function_specifier_opt (cp_parser* parser,
7848				  cp_decl_specifier_seq *decl_specs)
7849{
7850  switch (cp_lexer_peek_token (parser->lexer)->keyword)
7851    {
7852    case RID_INLINE:
7853      if (decl_specs)
7854	++decl_specs->specs[(int) ds_inline];
7855      break;
7856
7857    case RID_VIRTUAL:
7858      /* 14.5.2.3 [temp.mem]
7859
7860	 A member function template shall not be virtual.  */
7861      if (PROCESSING_REAL_TEMPLATE_DECL_P ())
7862	error ("templates may not be %<virtual%>");
7863      else if (decl_specs)
7864	++decl_specs->specs[(int) ds_virtual];
7865      break;
7866
7867    case RID_EXPLICIT:
7868      if (decl_specs)
7869	++decl_specs->specs[(int) ds_explicit];
7870      break;
7871
7872    default:
7873      return NULL_TREE;
7874    }
7875
7876  /* Consume the token.  */
7877  return cp_lexer_consume_token (parser->lexer)->u.value;
7878}
7879
7880/* Parse a linkage-specification.
7881
7882   linkage-specification:
7883     extern string-literal { declaration-seq [opt] }
7884     extern string-literal declaration  */
7885
7886static void
7887cp_parser_linkage_specification (cp_parser* parser)
7888{
7889  tree linkage;
7890
7891  /* Look for the `extern' keyword.  */
7892  cp_parser_require_keyword (parser, RID_EXTERN, "`extern'");
7893
7894  /* Look for the string-literal.  */
7895  linkage = cp_parser_string_literal (parser, false, false);
7896
7897  /* Transform the literal into an identifier.  If the literal is a
7898     wide-character string, or contains embedded NULs, then we can't
7899     handle it as the user wants.  */
7900  if (strlen (TREE_STRING_POINTER (linkage))
7901      != (size_t) (TREE_STRING_LENGTH (linkage) - 1))
7902    {
7903      cp_parser_error (parser, "invalid linkage-specification");
7904      /* Assume C++ linkage.  */
7905      linkage = lang_name_cplusplus;
7906    }
7907  else
7908    linkage = get_identifier (TREE_STRING_POINTER (linkage));
7909
7910  /* We're now using the new linkage.  */
7911  push_lang_context (linkage);
7912
7913  /* If the next token is a `{', then we're using the first
7914     production.  */
7915  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
7916    {
7917      /* Consume the `{' token.  */
7918      cp_lexer_consume_token (parser->lexer);
7919      /* Parse the declarations.  */
7920      cp_parser_declaration_seq_opt (parser);
7921      /* Look for the closing `}'.  */
7922      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
7923    }
7924  /* Otherwise, there's just one declaration.  */
7925  else
7926    {
7927      bool saved_in_unbraced_linkage_specification_p;
7928
7929      saved_in_unbraced_linkage_specification_p
7930	= parser->in_unbraced_linkage_specification_p;
7931      parser->in_unbraced_linkage_specification_p = true;
7932      cp_parser_declaration (parser);
7933      parser->in_unbraced_linkage_specification_p
7934	= saved_in_unbraced_linkage_specification_p;
7935    }
7936
7937  /* We're done with the linkage-specification.  */
7938  pop_lang_context ();
7939}
7940
7941/* Special member functions [gram.special] */
7942
7943/* Parse a conversion-function-id.
7944
7945   conversion-function-id:
7946     operator conversion-type-id
7947
7948   Returns an IDENTIFIER_NODE representing the operator.  */
7949
7950static tree
7951cp_parser_conversion_function_id (cp_parser* parser)
7952{
7953  tree type;
7954  tree saved_scope;
7955  tree saved_qualifying_scope;
7956  tree saved_object_scope;
7957  tree pushed_scope = NULL_TREE;
7958
7959  /* Look for the `operator' token.  */
7960  if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
7961    return error_mark_node;
7962  /* When we parse the conversion-type-id, the current scope will be
7963     reset.  However, we need that information in able to look up the
7964     conversion function later, so we save it here.  */
7965  saved_scope = parser->scope;
7966  saved_qualifying_scope = parser->qualifying_scope;
7967  saved_object_scope = parser->object_scope;
7968  /* We must enter the scope of the class so that the names of
7969     entities declared within the class are available in the
7970     conversion-type-id.  For example, consider:
7971
7972       struct S {
7973	 typedef int I;
7974	 operator I();
7975       };
7976
7977       S::operator I() { ... }
7978
7979     In order to see that `I' is a type-name in the definition, we
7980     must be in the scope of `S'.  */
7981  if (saved_scope)
7982    pushed_scope = push_scope (saved_scope);
7983  /* Parse the conversion-type-id.  */
7984  type = cp_parser_conversion_type_id (parser);
7985  /* Leave the scope of the class, if any.  */
7986  if (pushed_scope)
7987    pop_scope (pushed_scope);
7988  /* Restore the saved scope.  */
7989  parser->scope = saved_scope;
7990  parser->qualifying_scope = saved_qualifying_scope;
7991  parser->object_scope = saved_object_scope;
7992  /* If the TYPE is invalid, indicate failure.  */
7993  if (type == error_mark_node)
7994    return error_mark_node;
7995  return mangle_conv_op_name_for_type (type);
7996}
7997
7998/* Parse a conversion-type-id:
7999
8000   conversion-type-id:
8001     type-specifier-seq conversion-declarator [opt]
8002
8003   Returns the TYPE specified.  */
8004
8005static tree
8006cp_parser_conversion_type_id (cp_parser* parser)
8007{
8008  tree attributes;
8009  cp_decl_specifier_seq type_specifiers;
8010  cp_declarator *declarator;
8011  tree type_specified;
8012
8013  /* Parse the attributes.  */
8014  attributes = cp_parser_attributes_opt (parser);
8015  /* Parse the type-specifiers.  */
8016  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
8017				&type_specifiers);
8018  /* If that didn't work, stop.  */
8019  if (type_specifiers.type == error_mark_node)
8020    return error_mark_node;
8021  /* Parse the conversion-declarator.  */
8022  declarator = cp_parser_conversion_declarator_opt (parser);
8023
8024  type_specified =  grokdeclarator (declarator, &type_specifiers, TYPENAME,
8025				    /*initialized=*/0, &attributes);
8026  if (attributes)
8027    cplus_decl_attributes (&type_specified, attributes, /*flags=*/0);
8028  return type_specified;
8029}
8030
8031/* Parse an (optional) conversion-declarator.
8032
8033   conversion-declarator:
8034     ptr-operator conversion-declarator [opt]
8035
8036   */
8037
8038static cp_declarator *
8039cp_parser_conversion_declarator_opt (cp_parser* parser)
8040{
8041  enum tree_code code;
8042  tree class_type;
8043  cp_cv_quals cv_quals;
8044
8045  /* We don't know if there's a ptr-operator next, or not.  */
8046  cp_parser_parse_tentatively (parser);
8047  /* Try the ptr-operator.  */
8048  code = cp_parser_ptr_operator (parser, &class_type, &cv_quals);
8049  /* If it worked, look for more conversion-declarators.  */
8050  if (cp_parser_parse_definitely (parser))
8051    {
8052      cp_declarator *declarator;
8053
8054      /* Parse another optional declarator.  */
8055      declarator = cp_parser_conversion_declarator_opt (parser);
8056
8057      /* Create the representation of the declarator.  */
8058      if (class_type)
8059	declarator = make_ptrmem_declarator (cv_quals, class_type,
8060					     declarator);
8061      else if (code == INDIRECT_REF)
8062	declarator = make_pointer_declarator (cv_quals, declarator);
8063      else
8064	declarator = make_reference_declarator (cv_quals, declarator);
8065
8066      return declarator;
8067   }
8068
8069  return NULL;
8070}
8071
8072/* Parse an (optional) ctor-initializer.
8073
8074   ctor-initializer:
8075     : mem-initializer-list
8076
8077   Returns TRUE iff the ctor-initializer was actually present.  */
8078
8079static bool
8080cp_parser_ctor_initializer_opt (cp_parser* parser)
8081{
8082  /* If the next token is not a `:', then there is no
8083     ctor-initializer.  */
8084  if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
8085    {
8086      /* Do default initialization of any bases and members.  */
8087      if (DECL_CONSTRUCTOR_P (current_function_decl))
8088	finish_mem_initializers (NULL_TREE);
8089
8090      return false;
8091    }
8092
8093  /* Consume the `:' token.  */
8094  cp_lexer_consume_token (parser->lexer);
8095  /* And the mem-initializer-list.  */
8096  cp_parser_mem_initializer_list (parser);
8097
8098  return true;
8099}
8100
8101/* Parse a mem-initializer-list.
8102
8103   mem-initializer-list:
8104     mem-initializer
8105     mem-initializer , mem-initializer-list  */
8106
8107static void
8108cp_parser_mem_initializer_list (cp_parser* parser)
8109{
8110  tree mem_initializer_list = NULL_TREE;
8111
8112  /* Let the semantic analysis code know that we are starting the
8113     mem-initializer-list.  */
8114  if (!DECL_CONSTRUCTOR_P (current_function_decl))
8115    error ("only constructors take base initializers");
8116
8117  /* Loop through the list.  */
8118  while (true)
8119    {
8120      tree mem_initializer;
8121
8122      /* Parse the mem-initializer.  */
8123      mem_initializer = cp_parser_mem_initializer (parser);
8124      /* Add it to the list, unless it was erroneous.  */
8125      if (mem_initializer != error_mark_node)
8126	{
8127	  TREE_CHAIN (mem_initializer) = mem_initializer_list;
8128	  mem_initializer_list = mem_initializer;
8129	}
8130      /* If the next token is not a `,', we're done.  */
8131      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8132	break;
8133      /* Consume the `,' token.  */
8134      cp_lexer_consume_token (parser->lexer);
8135    }
8136
8137  /* Perform semantic analysis.  */
8138  if (DECL_CONSTRUCTOR_P (current_function_decl))
8139    finish_mem_initializers (mem_initializer_list);
8140}
8141
8142/* Parse a mem-initializer.
8143
8144   mem-initializer:
8145     mem-initializer-id ( expression-list [opt] )
8146
8147   GNU extension:
8148
8149   mem-initializer:
8150     ( expression-list [opt] )
8151
8152   Returns a TREE_LIST.  The TREE_PURPOSE is the TYPE (for a base
8153   class) or FIELD_DECL (for a non-static data member) to initialize;
8154   the TREE_VALUE is the expression-list.  An empty initialization
8155   list is represented by void_list_node.  */
8156
8157static tree
8158cp_parser_mem_initializer (cp_parser* parser)
8159{
8160  tree mem_initializer_id;
8161  tree expression_list;
8162  tree member;
8163
8164  /* Find out what is being initialized.  */
8165  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
8166    {
8167      pedwarn ("anachronistic old-style base class initializer");
8168      mem_initializer_id = NULL_TREE;
8169    }
8170  else
8171    mem_initializer_id = cp_parser_mem_initializer_id (parser);
8172  member = expand_member_init (mem_initializer_id);
8173  if (member && !DECL_P (member))
8174    in_base_initializer = 1;
8175
8176  expression_list
8177    = cp_parser_parenthesized_expression_list (parser, false,
8178					       /*cast_p=*/false,
8179					       /*non_constant_p=*/NULL);
8180  if (expression_list == error_mark_node)
8181    return error_mark_node;
8182  if (!expression_list)
8183    expression_list = void_type_node;
8184
8185  in_base_initializer = 0;
8186
8187  return member ? build_tree_list (member, expression_list) : error_mark_node;
8188}
8189
8190/* Parse a mem-initializer-id.
8191
8192   mem-initializer-id:
8193     :: [opt] nested-name-specifier [opt] class-name
8194     identifier
8195
8196   Returns a TYPE indicating the class to be initializer for the first
8197   production.  Returns an IDENTIFIER_NODE indicating the data member
8198   to be initialized for the second production.  */
8199
8200static tree
8201cp_parser_mem_initializer_id (cp_parser* parser)
8202{
8203  bool global_scope_p;
8204  bool nested_name_specifier_p;
8205  bool template_p = false;
8206  tree id;
8207
8208  /* `typename' is not allowed in this context ([temp.res]).  */
8209  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
8210    {
8211      error ("keyword %<typename%> not allowed in this context (a qualified "
8212	     "member initializer is implicitly a type)");
8213      cp_lexer_consume_token (parser->lexer);
8214    }
8215  /* Look for the optional `::' operator.  */
8216  global_scope_p
8217    = (cp_parser_global_scope_opt (parser,
8218				   /*current_scope_valid_p=*/false)
8219       != NULL_TREE);
8220  /* Look for the optional nested-name-specifier.  The simplest way to
8221     implement:
8222
8223       [temp.res]
8224
8225       The keyword `typename' is not permitted in a base-specifier or
8226       mem-initializer; in these contexts a qualified name that
8227       depends on a template-parameter is implicitly assumed to be a
8228       type name.
8229
8230     is to assume that we have seen the `typename' keyword at this
8231     point.  */
8232  nested_name_specifier_p
8233    = (cp_parser_nested_name_specifier_opt (parser,
8234					    /*typename_keyword_p=*/true,
8235					    /*check_dependency_p=*/true,
8236					    /*type_p=*/true,
8237					    /*is_declaration=*/true)
8238       != NULL_TREE);
8239  if (nested_name_specifier_p)
8240    template_p = cp_parser_optional_template_keyword (parser);
8241  /* If there is a `::' operator or a nested-name-specifier, then we
8242     are definitely looking for a class-name.  */
8243  if (global_scope_p || nested_name_specifier_p)
8244    return cp_parser_class_name (parser,
8245				 /*typename_keyword_p=*/true,
8246				 /*template_keyword_p=*/template_p,
8247				 none_type,
8248				 /*check_dependency_p=*/true,
8249				 /*class_head_p=*/false,
8250				 /*is_declaration=*/true);
8251  /* Otherwise, we could also be looking for an ordinary identifier.  */
8252  cp_parser_parse_tentatively (parser);
8253  /* Try a class-name.  */
8254  id = cp_parser_class_name (parser,
8255			     /*typename_keyword_p=*/true,
8256			     /*template_keyword_p=*/false,
8257			     none_type,
8258			     /*check_dependency_p=*/true,
8259			     /*class_head_p=*/false,
8260			     /*is_declaration=*/true);
8261  /* If we found one, we're done.  */
8262  if (cp_parser_parse_definitely (parser))
8263    return id;
8264  /* Otherwise, look for an ordinary identifier.  */
8265  return cp_parser_identifier (parser);
8266}
8267
8268/* Overloading [gram.over] */
8269
8270/* Parse an operator-function-id.
8271
8272   operator-function-id:
8273     operator operator
8274
8275   Returns an IDENTIFIER_NODE for the operator which is a
8276   human-readable spelling of the identifier, e.g., `operator +'.  */
8277
8278static tree
8279cp_parser_operator_function_id (cp_parser* parser)
8280{
8281  /* Look for the `operator' keyword.  */
8282  if (!cp_parser_require_keyword (parser, RID_OPERATOR, "`operator'"))
8283    return error_mark_node;
8284  /* And then the name of the operator itself.  */
8285  return cp_parser_operator (parser);
8286}
8287
8288/* Parse an operator.
8289
8290   operator:
8291     new delete new[] delete[] + - * / % ^ & | ~ ! = < >
8292     += -= *= /= %= ^= &= |= << >> >>= <<= == != <= >= &&
8293     || ++ -- , ->* -> () []
8294
8295   GNU Extensions:
8296
8297   operator:
8298     <? >? <?= >?=
8299
8300   Returns an IDENTIFIER_NODE for the operator which is a
8301   human-readable spelling of the identifier, e.g., `operator +'.  */
8302
8303static tree
8304cp_parser_operator (cp_parser* parser)
8305{
8306  tree id = NULL_TREE;
8307  cp_token *token;
8308
8309  /* Peek at the next token.  */
8310  token = cp_lexer_peek_token (parser->lexer);
8311  /* Figure out which operator we have.  */
8312  switch (token->type)
8313    {
8314    case CPP_KEYWORD:
8315      {
8316	enum tree_code op;
8317
8318	/* The keyword should be either `new' or `delete'.  */
8319	if (token->keyword == RID_NEW)
8320	  op = NEW_EXPR;
8321	else if (token->keyword == RID_DELETE)
8322	  op = DELETE_EXPR;
8323	else
8324	  break;
8325
8326	/* Consume the `new' or `delete' token.  */
8327	cp_lexer_consume_token (parser->lexer);
8328
8329	/* Peek at the next token.  */
8330	token = cp_lexer_peek_token (parser->lexer);
8331	/* If it's a `[' token then this is the array variant of the
8332	   operator.  */
8333	if (token->type == CPP_OPEN_SQUARE)
8334	  {
8335	    /* Consume the `[' token.  */
8336	    cp_lexer_consume_token (parser->lexer);
8337	    /* Look for the `]' token.  */
8338	    cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8339	    id = ansi_opname (op == NEW_EXPR
8340			      ? VEC_NEW_EXPR : VEC_DELETE_EXPR);
8341	  }
8342	/* Otherwise, we have the non-array variant.  */
8343	else
8344	  id = ansi_opname (op);
8345
8346	return id;
8347      }
8348
8349    case CPP_PLUS:
8350      id = ansi_opname (PLUS_EXPR);
8351      break;
8352
8353    case CPP_MINUS:
8354      id = ansi_opname (MINUS_EXPR);
8355      break;
8356
8357    case CPP_MULT:
8358      id = ansi_opname (MULT_EXPR);
8359      break;
8360
8361    case CPP_DIV:
8362      id = ansi_opname (TRUNC_DIV_EXPR);
8363      break;
8364
8365    case CPP_MOD:
8366      id = ansi_opname (TRUNC_MOD_EXPR);
8367      break;
8368
8369    case CPP_XOR:
8370      id = ansi_opname (BIT_XOR_EXPR);
8371      break;
8372
8373    case CPP_AND:
8374      id = ansi_opname (BIT_AND_EXPR);
8375      break;
8376
8377    case CPP_OR:
8378      id = ansi_opname (BIT_IOR_EXPR);
8379      break;
8380
8381    case CPP_COMPL:
8382      id = ansi_opname (BIT_NOT_EXPR);
8383      break;
8384
8385    case CPP_NOT:
8386      id = ansi_opname (TRUTH_NOT_EXPR);
8387      break;
8388
8389    case CPP_EQ:
8390      id = ansi_assopname (NOP_EXPR);
8391      break;
8392
8393    case CPP_LESS:
8394      id = ansi_opname (LT_EXPR);
8395      break;
8396
8397    case CPP_GREATER:
8398      id = ansi_opname (GT_EXPR);
8399      break;
8400
8401    case CPP_PLUS_EQ:
8402      id = ansi_assopname (PLUS_EXPR);
8403      break;
8404
8405    case CPP_MINUS_EQ:
8406      id = ansi_assopname (MINUS_EXPR);
8407      break;
8408
8409    case CPP_MULT_EQ:
8410      id = ansi_assopname (MULT_EXPR);
8411      break;
8412
8413    case CPP_DIV_EQ:
8414      id = ansi_assopname (TRUNC_DIV_EXPR);
8415      break;
8416
8417    case CPP_MOD_EQ:
8418      id = ansi_assopname (TRUNC_MOD_EXPR);
8419      break;
8420
8421    case CPP_XOR_EQ:
8422      id = ansi_assopname (BIT_XOR_EXPR);
8423      break;
8424
8425    case CPP_AND_EQ:
8426      id = ansi_assopname (BIT_AND_EXPR);
8427      break;
8428
8429    case CPP_OR_EQ:
8430      id = ansi_assopname (BIT_IOR_EXPR);
8431      break;
8432
8433    case CPP_LSHIFT:
8434      id = ansi_opname (LSHIFT_EXPR);
8435      break;
8436
8437    case CPP_RSHIFT:
8438      id = ansi_opname (RSHIFT_EXPR);
8439      break;
8440
8441    case CPP_LSHIFT_EQ:
8442      id = ansi_assopname (LSHIFT_EXPR);
8443      break;
8444
8445    case CPP_RSHIFT_EQ:
8446      id = ansi_assopname (RSHIFT_EXPR);
8447      break;
8448
8449    case CPP_EQ_EQ:
8450      id = ansi_opname (EQ_EXPR);
8451      break;
8452
8453    case CPP_NOT_EQ:
8454      id = ansi_opname (NE_EXPR);
8455      break;
8456
8457    case CPP_LESS_EQ:
8458      id = ansi_opname (LE_EXPR);
8459      break;
8460
8461    case CPP_GREATER_EQ:
8462      id = ansi_opname (GE_EXPR);
8463      break;
8464
8465    case CPP_AND_AND:
8466      id = ansi_opname (TRUTH_ANDIF_EXPR);
8467      break;
8468
8469    case CPP_OR_OR:
8470      id = ansi_opname (TRUTH_ORIF_EXPR);
8471      break;
8472
8473    case CPP_PLUS_PLUS:
8474      id = ansi_opname (POSTINCREMENT_EXPR);
8475      break;
8476
8477    case CPP_MINUS_MINUS:
8478      id = ansi_opname (PREDECREMENT_EXPR);
8479      break;
8480
8481    case CPP_COMMA:
8482      id = ansi_opname (COMPOUND_EXPR);
8483      break;
8484
8485    case CPP_DEREF_STAR:
8486      id = ansi_opname (MEMBER_REF);
8487      break;
8488
8489    case CPP_DEREF:
8490      id = ansi_opname (COMPONENT_REF);
8491      break;
8492
8493    case CPP_OPEN_PAREN:
8494      /* Consume the `('.  */
8495      cp_lexer_consume_token (parser->lexer);
8496      /* Look for the matching `)'.  */
8497      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
8498      return ansi_opname (CALL_EXPR);
8499
8500    case CPP_OPEN_SQUARE:
8501      /* Consume the `['.  */
8502      cp_lexer_consume_token (parser->lexer);
8503      /* Look for the matching `]'.  */
8504      cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
8505      return ansi_opname (ARRAY_REF);
8506
8507    default:
8508      /* Anything else is an error.  */
8509      break;
8510    }
8511
8512  /* If we have selected an identifier, we need to consume the
8513     operator token.  */
8514  if (id)
8515    cp_lexer_consume_token (parser->lexer);
8516  /* Otherwise, no valid operator name was present.  */
8517  else
8518    {
8519      cp_parser_error (parser, "expected operator");
8520      id = error_mark_node;
8521    }
8522
8523  return id;
8524}
8525
8526/* Parse a template-declaration.
8527
8528   template-declaration:
8529     export [opt] template < template-parameter-list > declaration
8530
8531   If MEMBER_P is TRUE, this template-declaration occurs within a
8532   class-specifier.
8533
8534   The grammar rule given by the standard isn't correct.  What
8535   is really meant is:
8536
8537   template-declaration:
8538     export [opt] template-parameter-list-seq
8539       decl-specifier-seq [opt] init-declarator [opt] ;
8540     export [opt] template-parameter-list-seq
8541       function-definition
8542
8543   template-parameter-list-seq:
8544     template-parameter-list-seq [opt]
8545     template < template-parameter-list >  */
8546
8547static void
8548cp_parser_template_declaration (cp_parser* parser, bool member_p)
8549{
8550  /* Check for `export'.  */
8551  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXPORT))
8552    {
8553      /* Consume the `export' token.  */
8554      cp_lexer_consume_token (parser->lexer);
8555      /* Warn that we do not support `export'.  */
8556      warning (0, "keyword %<export%> not implemented, and will be ignored");
8557    }
8558
8559  cp_parser_template_declaration_after_export (parser, member_p);
8560}
8561
8562/* Parse a template-parameter-list.
8563
8564   template-parameter-list:
8565     template-parameter
8566     template-parameter-list , template-parameter
8567
8568   Returns a TREE_LIST.  Each node represents a template parameter.
8569   The nodes are connected via their TREE_CHAINs.  */
8570
8571static tree
8572cp_parser_template_parameter_list (cp_parser* parser)
8573{
8574  tree parameter_list = NULL_TREE;
8575
8576  begin_template_parm_list ();
8577  while (true)
8578    {
8579      tree parameter;
8580      cp_token *token;
8581      bool is_non_type;
8582
8583      /* Parse the template-parameter.  */
8584      parameter = cp_parser_template_parameter (parser, &is_non_type);
8585      /* Add it to the list.  */
8586      if (parameter != error_mark_node)
8587	parameter_list = process_template_parm (parameter_list,
8588						parameter,
8589						is_non_type);
8590      else
8591       {
8592         tree err_parm = build_tree_list (parameter, parameter);
8593         TREE_VALUE (err_parm) = error_mark_node;
8594         parameter_list = chainon (parameter_list, err_parm);
8595       }
8596
8597      /* Peek at the next token.  */
8598      token = cp_lexer_peek_token (parser->lexer);
8599      /* If it's not a `,', we're done.  */
8600      if (token->type != CPP_COMMA)
8601	break;
8602      /* Otherwise, consume the `,' token.  */
8603      cp_lexer_consume_token (parser->lexer);
8604    }
8605
8606  return end_template_parm_list (parameter_list);
8607}
8608
8609/* Parse a template-parameter.
8610
8611   template-parameter:
8612     type-parameter
8613     parameter-declaration
8614
8615   If all goes well, returns a TREE_LIST.  The TREE_VALUE represents
8616   the parameter.  The TREE_PURPOSE is the default value, if any.
8617   Returns ERROR_MARK_NODE on failure.  *IS_NON_TYPE is set to true
8618   iff this parameter is a non-type parameter.  */
8619
8620static tree
8621cp_parser_template_parameter (cp_parser* parser, bool *is_non_type)
8622{
8623  cp_token *token;
8624  cp_parameter_declarator *parameter_declarator;
8625  tree parm;
8626
8627  /* Assume it is a type parameter or a template parameter.  */
8628  *is_non_type = false;
8629  /* Peek at the next token.  */
8630  token = cp_lexer_peek_token (parser->lexer);
8631  /* If it is `class' or `template', we have a type-parameter.  */
8632  if (token->keyword == RID_TEMPLATE)
8633    return cp_parser_type_parameter (parser);
8634  /* If it is `class' or `typename' we do not know yet whether it is a
8635     type parameter or a non-type parameter.  Consider:
8636
8637       template <typename T, typename T::X X> ...
8638
8639     or:
8640
8641       template <class C, class D*> ...
8642
8643     Here, the first parameter is a type parameter, and the second is
8644     a non-type parameter.  We can tell by looking at the token after
8645     the identifier -- if it is a `,', `=', or `>' then we have a type
8646     parameter.  */
8647  if (token->keyword == RID_TYPENAME || token->keyword == RID_CLASS)
8648    {
8649      /* Peek at the token after `class' or `typename'.  */
8650      token = cp_lexer_peek_nth_token (parser->lexer, 2);
8651      /* If it's an identifier, skip it.  */
8652      if (token->type == CPP_NAME)
8653	token = cp_lexer_peek_nth_token (parser->lexer, 3);
8654      /* Now, see if the token looks like the end of a template
8655	 parameter.  */
8656      if (token->type == CPP_COMMA
8657	  || token->type == CPP_EQ
8658	  || token->type == CPP_GREATER)
8659	return cp_parser_type_parameter (parser);
8660    }
8661
8662  /* Otherwise, it is a non-type parameter.
8663
8664     [temp.param]
8665
8666     When parsing a default template-argument for a non-type
8667     template-parameter, the first non-nested `>' is taken as the end
8668     of the template parameter-list rather than a greater-than
8669     operator.  */
8670  *is_non_type = true;
8671  parameter_declarator
8672     = cp_parser_parameter_declaration (parser, /*template_parm_p=*/true,
8673					/*parenthesized_p=*/NULL);
8674  parm = grokdeclarator (parameter_declarator->declarator,
8675			 &parameter_declarator->decl_specifiers,
8676			 PARM, /*initialized=*/0,
8677			 /*attrlist=*/NULL);
8678  if (parm == error_mark_node)
8679    return error_mark_node;
8680  return build_tree_list (parameter_declarator->default_argument, parm);
8681}
8682
8683/* Parse a type-parameter.
8684
8685   type-parameter:
8686     class identifier [opt]
8687     class identifier [opt] = type-id
8688     typename identifier [opt]
8689     typename identifier [opt] = type-id
8690     template < template-parameter-list > class identifier [opt]
8691     template < template-parameter-list > class identifier [opt]
8692       = id-expression
8693
8694   Returns a TREE_LIST.  The TREE_VALUE is itself a TREE_LIST.  The
8695   TREE_PURPOSE is the default-argument, if any.  The TREE_VALUE is
8696   the declaration of the parameter.  */
8697
8698static tree
8699cp_parser_type_parameter (cp_parser* parser)
8700{
8701  cp_token *token;
8702  tree parameter;
8703
8704  /* Look for a keyword to tell us what kind of parameter this is.  */
8705  token = cp_parser_require (parser, CPP_KEYWORD,
8706			     "`class', `typename', or `template'");
8707  if (!token)
8708    return error_mark_node;
8709
8710  switch (token->keyword)
8711    {
8712    case RID_CLASS:
8713    case RID_TYPENAME:
8714      {
8715	tree identifier;
8716	tree default_argument;
8717
8718	/* If the next token is an identifier, then it names the
8719	   parameter.  */
8720	if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
8721	  identifier = cp_parser_identifier (parser);
8722	else
8723	  identifier = NULL_TREE;
8724
8725	/* Create the parameter.  */
8726	parameter = finish_template_type_parm (class_type_node, identifier);
8727
8728	/* If the next token is an `=', we have a default argument.  */
8729	if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8730	  {
8731	    /* Consume the `=' token.  */
8732	    cp_lexer_consume_token (parser->lexer);
8733	    /* Parse the default-argument.  */
8734	    push_deferring_access_checks (dk_no_deferred);
8735	    default_argument = cp_parser_type_id (parser);
8736	    pop_deferring_access_checks ();
8737	  }
8738	else
8739	  default_argument = NULL_TREE;
8740
8741	/* Create the combined representation of the parameter and the
8742	   default argument.  */
8743	parameter = build_tree_list (default_argument, parameter);
8744      }
8745      break;
8746
8747    case RID_TEMPLATE:
8748      {
8749	tree parameter_list;
8750	tree identifier;
8751	tree default_argument;
8752
8753	/* Look for the `<'.  */
8754	cp_parser_require (parser, CPP_LESS, "`<'");
8755	/* Parse the template-parameter-list.  */
8756	parameter_list = cp_parser_template_parameter_list (parser);
8757	/* Look for the `>'.  */
8758	cp_parser_require (parser, CPP_GREATER, "`>'");
8759	/* Look for the `class' keyword.  */
8760	cp_parser_require_keyword (parser, RID_CLASS, "`class'");
8761	/* If the next token is an `=', then there is a
8762	   default-argument.  If the next token is a `>', we are at
8763	   the end of the parameter-list.  If the next token is a `,',
8764	   then we are at the end of this parameter.  */
8765	if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)
8766	    && cp_lexer_next_token_is_not (parser->lexer, CPP_GREATER)
8767	    && cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
8768	  {
8769	    identifier = cp_parser_identifier (parser);
8770	    /* Treat invalid names as if the parameter were nameless.  */
8771	    if (identifier == error_mark_node)
8772	      identifier = NULL_TREE;
8773	  }
8774	else
8775	  identifier = NULL_TREE;
8776
8777	/* Create the template parameter.  */
8778	parameter = finish_template_template_parm (class_type_node,
8779						   identifier);
8780
8781	/* If the next token is an `=', then there is a
8782	   default-argument.  */
8783	if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
8784	  {
8785	    bool is_template;
8786
8787	    /* Consume the `='.  */
8788	    cp_lexer_consume_token (parser->lexer);
8789	    /* Parse the id-expression.  */
8790	    push_deferring_access_checks (dk_no_deferred);
8791	    default_argument
8792	      = cp_parser_id_expression (parser,
8793					 /*template_keyword_p=*/false,
8794					 /*check_dependency_p=*/true,
8795					 /*template_p=*/&is_template,
8796					 /*declarator_p=*/false,
8797					 /*optional_p=*/false);
8798	    if (TREE_CODE (default_argument) == TYPE_DECL)
8799	      /* If the id-expression was a template-id that refers to
8800		 a template-class, we already have the declaration here,
8801		 so no further lookup is needed.  */
8802		 ;
8803	    else
8804	      /* Look up the name.  */
8805	      default_argument
8806		= cp_parser_lookup_name (parser, default_argument,
8807					 none_type,
8808					 /*is_template=*/is_template,
8809					 /*is_namespace=*/false,
8810					 /*check_dependency=*/true,
8811					 /*ambiguous_decls=*/NULL);
8812	    /* See if the default argument is valid.  */
8813	    default_argument
8814	      = check_template_template_default_arg (default_argument);
8815	    pop_deferring_access_checks ();
8816	  }
8817	else
8818	  default_argument = NULL_TREE;
8819
8820	/* Create the combined representation of the parameter and the
8821	   default argument.  */
8822	parameter = build_tree_list (default_argument, parameter);
8823      }
8824      break;
8825
8826    default:
8827      gcc_unreachable ();
8828      break;
8829    }
8830
8831  return parameter;
8832}
8833
8834/* Parse a template-id.
8835
8836   template-id:
8837     template-name < template-argument-list [opt] >
8838
8839   If TEMPLATE_KEYWORD_P is TRUE, then we have just seen the
8840   `template' keyword.  In this case, a TEMPLATE_ID_EXPR will be
8841   returned.  Otherwise, if the template-name names a function, or set
8842   of functions, returns a TEMPLATE_ID_EXPR.  If the template-name
8843   names a class, returns a TYPE_DECL for the specialization.
8844
8845   If CHECK_DEPENDENCY_P is FALSE, names are looked up in
8846   uninstantiated templates.  */
8847
8848static tree
8849cp_parser_template_id (cp_parser *parser,
8850		       bool template_keyword_p,
8851		       bool check_dependency_p,
8852		       bool is_declaration)
8853{
8854  int i;
8855  tree template;
8856  tree arguments;
8857  tree template_id;
8858  cp_token_position start_of_id = 0;
8859  deferred_access_check *chk;
8860  VEC (deferred_access_check,gc) *access_check;
8861  cp_token *next_token, *next_token_2;
8862  bool is_identifier;
8863
8864  /* If the next token corresponds to a template-id, there is no need
8865     to reparse it.  */
8866  next_token = cp_lexer_peek_token (parser->lexer);
8867  if (next_token->type == CPP_TEMPLATE_ID)
8868    {
8869      struct tree_check *check_value;
8870
8871      /* Get the stored value.  */
8872      check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
8873      /* Perform any access checks that were deferred.  */
8874      access_check = check_value->checks;
8875      if (access_check)
8876	{
8877	  for (i = 0 ;
8878	       VEC_iterate (deferred_access_check, access_check, i, chk) ;
8879	       ++i)
8880	    {
8881	      perform_or_defer_access_check (chk->binfo,
8882					     chk->decl,
8883					     chk->diag_decl);
8884	    }
8885	}
8886      /* Return the stored value.  */
8887      return check_value->value;
8888    }
8889
8890  /* Avoid performing name lookup if there is no possibility of
8891     finding a template-id.  */
8892  if ((next_token->type != CPP_NAME && next_token->keyword != RID_OPERATOR)
8893      || (next_token->type == CPP_NAME
8894	  && !cp_parser_nth_token_starts_template_argument_list_p
8895	       (parser, 2)))
8896    {
8897      cp_parser_error (parser, "expected template-id");
8898      return error_mark_node;
8899    }
8900
8901  /* Remember where the template-id starts.  */
8902  if (cp_parser_uncommitted_to_tentative_parse_p (parser))
8903    start_of_id = cp_lexer_token_position (parser->lexer, false);
8904
8905  push_deferring_access_checks (dk_deferred);
8906
8907  /* Parse the template-name.  */
8908  is_identifier = false;
8909  template = cp_parser_template_name (parser, template_keyword_p,
8910				      check_dependency_p,
8911				      is_declaration,
8912				      &is_identifier);
8913  if (template == error_mark_node || is_identifier)
8914    {
8915      pop_deferring_access_checks ();
8916      return template;
8917    }
8918
8919  /* If we find the sequence `[:' after a template-name, it's probably
8920     a digraph-typo for `< ::'. Substitute the tokens and check if we can
8921     parse correctly the argument list.  */
8922  next_token = cp_lexer_peek_token (parser->lexer);
8923  next_token_2 = cp_lexer_peek_nth_token (parser->lexer, 2);
8924  if (next_token->type == CPP_OPEN_SQUARE
8925      && next_token->flags & DIGRAPH
8926      && next_token_2->type == CPP_COLON
8927      && !(next_token_2->flags & PREV_WHITE))
8928    {
8929      cp_parser_parse_tentatively (parser);
8930      /* Change `:' into `::'.  */
8931      next_token_2->type = CPP_SCOPE;
8932      /* Consume the first token (CPP_OPEN_SQUARE - which we pretend it is
8933	 CPP_LESS.  */
8934      cp_lexer_consume_token (parser->lexer);
8935      /* Parse the arguments.  */
8936      arguments = cp_parser_enclosed_template_argument_list (parser);
8937      if (!cp_parser_parse_definitely (parser))
8938	{
8939	  /* If we couldn't parse an argument list, then we revert our changes
8940	     and return simply an error. Maybe this is not a template-id
8941	     after all.  */
8942	  next_token_2->type = CPP_COLON;
8943	  cp_parser_error (parser, "expected %<<%>");
8944	  pop_deferring_access_checks ();
8945	  return error_mark_node;
8946	}
8947      /* Otherwise, emit an error about the invalid digraph, but continue
8948	 parsing because we got our argument list.  */
8949      pedwarn ("%<<::%> cannot begin a template-argument list");
8950      inform ("%<<:%> is an alternate spelling for %<[%>. Insert whitespace "
8951	      "between %<<%> and %<::%>");
8952      if (!flag_permissive)
8953	{
8954	  static bool hint;
8955	  if (!hint)
8956	    {
8957	      inform ("(if you use -fpermissive G++ will accept your code)");
8958	      hint = true;
8959	    }
8960	}
8961    }
8962  else
8963    {
8964      /* Look for the `<' that starts the template-argument-list.  */
8965      if (!cp_parser_require (parser, CPP_LESS, "`<'"))
8966	{
8967	  pop_deferring_access_checks ();
8968	  return error_mark_node;
8969	}
8970      /* Parse the arguments.  */
8971      arguments = cp_parser_enclosed_template_argument_list (parser);
8972    }
8973
8974  /* Build a representation of the specialization.  */
8975  if (TREE_CODE (template) == IDENTIFIER_NODE)
8976    template_id = build_min_nt (TEMPLATE_ID_EXPR, template, arguments);
8977  else if (DECL_CLASS_TEMPLATE_P (template)
8978	   || DECL_TEMPLATE_TEMPLATE_PARM_P (template))
8979    {
8980      bool entering_scope;
8981      /* In "template <typename T> ... A<T>::", A<T> is the abstract A
8982	 template (rather than some instantiation thereof) only if
8983	 is not nested within some other construct.  For example, in
8984	 "template <typename T> void f(T) { A<T>::", A<T> is just an
8985	 instantiation of A.  */
8986      entering_scope = (template_parm_scope_p ()
8987			&& cp_lexer_next_token_is (parser->lexer,
8988						   CPP_SCOPE));
8989      template_id
8990	= finish_template_type (template, arguments, entering_scope);
8991    }
8992  else
8993    {
8994      /* If it's not a class-template or a template-template, it should be
8995	 a function-template.  */
8996      gcc_assert ((DECL_FUNCTION_TEMPLATE_P (template)
8997		   || TREE_CODE (template) == OVERLOAD
8998		   || BASELINK_P (template)));
8999
9000      template_id = lookup_template_function (template, arguments);
9001    }
9002
9003  /* If parsing tentatively, replace the sequence of tokens that makes
9004     up the template-id with a CPP_TEMPLATE_ID token.  That way,
9005     should we re-parse the token stream, we will not have to repeat
9006     the effort required to do the parse, nor will we issue duplicate
9007     error messages about problems during instantiation of the
9008     template.  */
9009  if (start_of_id)
9010    {
9011      cp_token *token = cp_lexer_token_at (parser->lexer, start_of_id);
9012
9013      /* Reset the contents of the START_OF_ID token.  */
9014      token->type = CPP_TEMPLATE_ID;
9015      /* Retrieve any deferred checks.  Do not pop this access checks yet
9016	 so the memory will not be reclaimed during token replacing below.  */
9017      token->u.tree_check_value = GGC_CNEW (struct tree_check);
9018      token->u.tree_check_value->value = template_id;
9019      token->u.tree_check_value->checks = get_deferred_access_checks ();
9020      token->keyword = RID_MAX;
9021
9022      /* Purge all subsequent tokens.  */
9023      cp_lexer_purge_tokens_after (parser->lexer, start_of_id);
9024
9025      /* ??? Can we actually assume that, if template_id ==
9026	 error_mark_node, we will have issued a diagnostic to the
9027	 user, as opposed to simply marking the tentative parse as
9028	 failed?  */
9029      if (cp_parser_error_occurred (parser) && template_id != error_mark_node)
9030	error ("parse error in template argument list");
9031    }
9032
9033  pop_deferring_access_checks ();
9034  return template_id;
9035}
9036
9037/* Parse a template-name.
9038
9039   template-name:
9040     identifier
9041
9042   The standard should actually say:
9043
9044   template-name:
9045     identifier
9046     operator-function-id
9047
9048   A defect report has been filed about this issue.
9049
9050   A conversion-function-id cannot be a template name because they cannot
9051   be part of a template-id. In fact, looking at this code:
9052
9053   a.operator K<int>()
9054
9055   the conversion-function-id is "operator K<int>", and K<int> is a type-id.
9056   It is impossible to call a templated conversion-function-id with an
9057   explicit argument list, since the only allowed template parameter is
9058   the type to which it is converting.
9059
9060   If TEMPLATE_KEYWORD_P is true, then we have just seen the
9061   `template' keyword, in a construction like:
9062
9063     T::template f<3>()
9064
9065   In that case `f' is taken to be a template-name, even though there
9066   is no way of knowing for sure.
9067
9068   Returns the TEMPLATE_DECL for the template, or an OVERLOAD if the
9069   name refers to a set of overloaded functions, at least one of which
9070   is a template, or an IDENTIFIER_NODE with the name of the template,
9071   if TEMPLATE_KEYWORD_P is true.  If CHECK_DEPENDENCY_P is FALSE,
9072   names are looked up inside uninstantiated templates.  */
9073
9074static tree
9075cp_parser_template_name (cp_parser* parser,
9076			 bool template_keyword_p,
9077			 bool check_dependency_p,
9078			 bool is_declaration,
9079			 bool *is_identifier)
9080{
9081  tree identifier;
9082  tree decl;
9083  tree fns;
9084
9085  /* If the next token is `operator', then we have either an
9086     operator-function-id or a conversion-function-id.  */
9087  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_OPERATOR))
9088    {
9089      /* We don't know whether we're looking at an
9090	 operator-function-id or a conversion-function-id.  */
9091      cp_parser_parse_tentatively (parser);
9092      /* Try an operator-function-id.  */
9093      identifier = cp_parser_operator_function_id (parser);
9094      /* If that didn't work, try a conversion-function-id.  */
9095      if (!cp_parser_parse_definitely (parser))
9096	{
9097	  cp_parser_error (parser, "expected template-name");
9098	  return error_mark_node;
9099	}
9100    }
9101  /* Look for the identifier.  */
9102  else
9103    identifier = cp_parser_identifier (parser);
9104
9105  /* If we didn't find an identifier, we don't have a template-id.  */
9106  if (identifier == error_mark_node)
9107    return error_mark_node;
9108
9109  /* If the name immediately followed the `template' keyword, then it
9110     is a template-name.  However, if the next token is not `<', then
9111     we do not treat it as a template-name, since it is not being used
9112     as part of a template-id.  This enables us to handle constructs
9113     like:
9114
9115       template <typename T> struct S { S(); };
9116       template <typename T> S<T>::S();
9117
9118     correctly.  We would treat `S' as a template -- if it were `S<T>'
9119     -- but we do not if there is no `<'.  */
9120
9121  if (processing_template_decl
9122      && cp_parser_nth_token_starts_template_argument_list_p (parser, 1))
9123    {
9124      /* In a declaration, in a dependent context, we pretend that the
9125	 "template" keyword was present in order to improve error
9126	 recovery.  For example, given:
9127
9128	   template <typename T> void f(T::X<int>);
9129
9130	 we want to treat "X<int>" as a template-id.  */
9131      if (is_declaration
9132	  && !template_keyword_p
9133	  && parser->scope && TYPE_P (parser->scope)
9134	  && check_dependency_p
9135	  && dependent_type_p (parser->scope)
9136	  /* Do not do this for dtors (or ctors), since they never
9137	     need the template keyword before their name.  */
9138	  && !constructor_name_p (identifier, parser->scope))
9139	{
9140	  cp_token_position start = 0;
9141
9142	  /* Explain what went wrong.  */
9143	  error ("non-template %qD used as template", identifier);
9144	  inform ("use %<%T::template %D%> to indicate that it is a template",
9145		  parser->scope, identifier);
9146	  /* If parsing tentatively, find the location of the "<" token.  */
9147	  if (cp_parser_simulate_error (parser))
9148	    start = cp_lexer_token_position (parser->lexer, true);
9149	  /* Parse the template arguments so that we can issue error
9150	     messages about them.  */
9151	  cp_lexer_consume_token (parser->lexer);
9152	  cp_parser_enclosed_template_argument_list (parser);
9153	  /* Skip tokens until we find a good place from which to
9154	     continue parsing.  */
9155	  cp_parser_skip_to_closing_parenthesis (parser,
9156						 /*recovering=*/true,
9157						 /*or_comma=*/true,
9158						 /*consume_paren=*/false);
9159	  /* If parsing tentatively, permanently remove the
9160	     template argument list.  That will prevent duplicate
9161	     error messages from being issued about the missing
9162	     "template" keyword.  */
9163	  if (start)
9164	    cp_lexer_purge_tokens_after (parser->lexer, start);
9165	  if (is_identifier)
9166	    *is_identifier = true;
9167	  return identifier;
9168	}
9169
9170      /* If the "template" keyword is present, then there is generally
9171	 no point in doing name-lookup, so we just return IDENTIFIER.
9172	 But, if the qualifying scope is non-dependent then we can
9173	 (and must) do name-lookup normally.  */
9174      if (template_keyword_p
9175	  && (!parser->scope
9176	      || (TYPE_P (parser->scope)
9177		  && dependent_type_p (parser->scope))))
9178	return identifier;
9179    }
9180
9181  /* Look up the name.  */
9182  decl = cp_parser_lookup_name (parser, identifier,
9183				none_type,
9184				/*is_template=*/false,
9185				/*is_namespace=*/false,
9186				check_dependency_p,
9187				/*ambiguous_decls=*/NULL);
9188  decl = maybe_get_template_decl_from_type_decl (decl);
9189
9190  /* If DECL is a template, then the name was a template-name.  */
9191  if (TREE_CODE (decl) == TEMPLATE_DECL)
9192    ;
9193  else
9194    {
9195      tree fn = NULL_TREE;
9196
9197      /* The standard does not explicitly indicate whether a name that
9198	 names a set of overloaded declarations, some of which are
9199	 templates, is a template-name.  However, such a name should
9200	 be a template-name; otherwise, there is no way to form a
9201	 template-id for the overloaded templates.  */
9202      fns = BASELINK_P (decl) ? BASELINK_FUNCTIONS (decl) : decl;
9203      if (TREE_CODE (fns) == OVERLOAD)
9204	for (fn = fns; fn; fn = OVL_NEXT (fn))
9205	  if (TREE_CODE (OVL_CURRENT (fn)) == TEMPLATE_DECL)
9206	    break;
9207
9208      if (!fn)
9209	{
9210	  /* The name does not name a template.  */
9211	  cp_parser_error (parser, "expected template-name");
9212	  return error_mark_node;
9213	}
9214    }
9215
9216  /* If DECL is dependent, and refers to a function, then just return
9217     its name; we will look it up again during template instantiation.  */
9218  if (DECL_FUNCTION_TEMPLATE_P (decl) || !DECL_P (decl))
9219    {
9220      tree scope = CP_DECL_CONTEXT (get_first_fn (decl));
9221      if (TYPE_P (scope) && dependent_type_p (scope))
9222	return identifier;
9223    }
9224
9225  return decl;
9226}
9227
9228/* Parse a template-argument-list.
9229
9230   template-argument-list:
9231     template-argument
9232     template-argument-list , template-argument
9233
9234   Returns a TREE_VEC containing the arguments.  */
9235
9236static tree
9237cp_parser_template_argument_list (cp_parser* parser)
9238{
9239  tree fixed_args[10];
9240  unsigned n_args = 0;
9241  unsigned alloced = 10;
9242  tree *arg_ary = fixed_args;
9243  tree vec;
9244  bool saved_in_template_argument_list_p;
9245  bool saved_ice_p;
9246  bool saved_non_ice_p;
9247
9248  saved_in_template_argument_list_p = parser->in_template_argument_list_p;
9249  parser->in_template_argument_list_p = true;
9250  /* Even if the template-id appears in an integral
9251     constant-expression, the contents of the argument list do
9252     not.  */
9253  saved_ice_p = parser->integral_constant_expression_p;
9254  parser->integral_constant_expression_p = false;
9255  saved_non_ice_p = parser->non_integral_constant_expression_p;
9256  parser->non_integral_constant_expression_p = false;
9257  /* Parse the arguments.  */
9258  do
9259    {
9260      tree argument;
9261
9262      if (n_args)
9263	/* Consume the comma.  */
9264	cp_lexer_consume_token (parser->lexer);
9265
9266      /* Parse the template-argument.  */
9267      argument = cp_parser_template_argument (parser);
9268      if (n_args == alloced)
9269	{
9270	  alloced *= 2;
9271
9272	  if (arg_ary == fixed_args)
9273	    {
9274	      arg_ary = XNEWVEC (tree, alloced);
9275	      memcpy (arg_ary, fixed_args, sizeof (tree) * n_args);
9276	    }
9277	  else
9278	    arg_ary = XRESIZEVEC (tree, arg_ary, alloced);
9279	}
9280      arg_ary[n_args++] = argument;
9281    }
9282  while (cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
9283
9284  vec = make_tree_vec (n_args);
9285
9286  while (n_args--)
9287    TREE_VEC_ELT (vec, n_args) = arg_ary[n_args];
9288
9289  if (arg_ary != fixed_args)
9290    free (arg_ary);
9291  parser->non_integral_constant_expression_p = saved_non_ice_p;
9292  parser->integral_constant_expression_p = saved_ice_p;
9293  parser->in_template_argument_list_p = saved_in_template_argument_list_p;
9294  return vec;
9295}
9296
9297/* Parse a template-argument.
9298
9299   template-argument:
9300     assignment-expression
9301     type-id
9302     id-expression
9303
9304   The representation is that of an assignment-expression, type-id, or
9305   id-expression -- except that the qualified id-expression is
9306   evaluated, so that the value returned is either a DECL or an
9307   OVERLOAD.
9308
9309   Although the standard says "assignment-expression", it forbids
9310   throw-expressions or assignments in the template argument.
9311   Therefore, we use "conditional-expression" instead.  */
9312
9313static tree
9314cp_parser_template_argument (cp_parser* parser)
9315{
9316  tree argument;
9317  bool template_p;
9318  bool address_p;
9319  bool maybe_type_id = false;
9320  cp_token *token;
9321  cp_id_kind idk;
9322
9323  /* There's really no way to know what we're looking at, so we just
9324     try each alternative in order.
9325
9326       [temp.arg]
9327
9328       In a template-argument, an ambiguity between a type-id and an
9329       expression is resolved to a type-id, regardless of the form of
9330       the corresponding template-parameter.
9331
9332     Therefore, we try a type-id first.  */
9333  cp_parser_parse_tentatively (parser);
9334  argument = cp_parser_type_id (parser);
9335  /* If there was no error parsing the type-id but the next token is a '>>',
9336     we probably found a typo for '> >'. But there are type-id which are
9337     also valid expressions. For instance:
9338
9339     struct X { int operator >> (int); };
9340     template <int V> struct Foo {};
9341     Foo<X () >> 5> r;
9342
9343     Here 'X()' is a valid type-id of a function type, but the user just
9344     wanted to write the expression "X() >> 5". Thus, we remember that we
9345     found a valid type-id, but we still try to parse the argument as an
9346     expression to see what happens.  */
9347  if (!cp_parser_error_occurred (parser)
9348      && cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
9349    {
9350      maybe_type_id = true;
9351      cp_parser_abort_tentative_parse (parser);
9352    }
9353  else
9354    {
9355      /* If the next token isn't a `,' or a `>', then this argument wasn't
9356      really finished. This means that the argument is not a valid
9357      type-id.  */
9358      if (!cp_parser_next_token_ends_template_argument_p (parser))
9359	cp_parser_error (parser, "expected template-argument");
9360      /* If that worked, we're done.  */
9361      if (cp_parser_parse_definitely (parser))
9362	return argument;
9363    }
9364  /* We're still not sure what the argument will be.  */
9365  cp_parser_parse_tentatively (parser);
9366  /* Try a template.  */
9367  argument = cp_parser_id_expression (parser,
9368				      /*template_keyword_p=*/false,
9369				      /*check_dependency_p=*/true,
9370				      &template_p,
9371				      /*declarator_p=*/false,
9372				      /*optional_p=*/false);
9373  /* If the next token isn't a `,' or a `>', then this argument wasn't
9374     really finished.  */
9375  if (!cp_parser_next_token_ends_template_argument_p (parser))
9376    cp_parser_error (parser, "expected template-argument");
9377  if (!cp_parser_error_occurred (parser))
9378    {
9379      /* Figure out what is being referred to.  If the id-expression
9380	 was for a class template specialization, then we will have a
9381	 TYPE_DECL at this point.  There is no need to do name lookup
9382	 at this point in that case.  */
9383      if (TREE_CODE (argument) != TYPE_DECL)
9384	argument = cp_parser_lookup_name (parser, argument,
9385					  none_type,
9386					  /*is_template=*/template_p,
9387					  /*is_namespace=*/false,
9388					  /*check_dependency=*/true,
9389					  /*ambiguous_decls=*/NULL);
9390      if (TREE_CODE (argument) != TEMPLATE_DECL
9391	  && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
9392	cp_parser_error (parser, "expected template-name");
9393    }
9394  if (cp_parser_parse_definitely (parser))
9395    return argument;
9396  /* It must be a non-type argument.  There permitted cases are given
9397     in [temp.arg.nontype]:
9398
9399     -- an integral constant-expression of integral or enumeration
9400	type; or
9401
9402     -- the name of a non-type template-parameter; or
9403
9404     -- the name of an object or function with external linkage...
9405
9406     -- the address of an object or function with external linkage...
9407
9408     -- a pointer to member...  */
9409  /* Look for a non-type template parameter.  */
9410  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
9411    {
9412      cp_parser_parse_tentatively (parser);
9413      argument = cp_parser_primary_expression (parser,
9414					       /*adress_p=*/false,
9415					       /*cast_p=*/false,
9416					       /*template_arg_p=*/true,
9417					       &idk);
9418      if (TREE_CODE (argument) != TEMPLATE_PARM_INDEX
9419	  || !cp_parser_next_token_ends_template_argument_p (parser))
9420	cp_parser_simulate_error (parser);
9421      if (cp_parser_parse_definitely (parser))
9422	return argument;
9423    }
9424
9425  /* If the next token is "&", the argument must be the address of an
9426     object or function with external linkage.  */
9427  address_p = cp_lexer_next_token_is (parser->lexer, CPP_AND);
9428  if (address_p)
9429    cp_lexer_consume_token (parser->lexer);
9430  /* See if we might have an id-expression.  */
9431  token = cp_lexer_peek_token (parser->lexer);
9432  if (token->type == CPP_NAME
9433      || token->keyword == RID_OPERATOR
9434      || token->type == CPP_SCOPE
9435      || token->type == CPP_TEMPLATE_ID
9436      || token->type == CPP_NESTED_NAME_SPECIFIER)
9437    {
9438      cp_parser_parse_tentatively (parser);
9439      argument = cp_parser_primary_expression (parser,
9440					       address_p,
9441					       /*cast_p=*/false,
9442					       /*template_arg_p=*/true,
9443					       &idk);
9444      if (cp_parser_error_occurred (parser)
9445	  || !cp_parser_next_token_ends_template_argument_p (parser))
9446	cp_parser_abort_tentative_parse (parser);
9447      else
9448	{
9449	  if (TREE_CODE (argument) == INDIRECT_REF)
9450	    {
9451	      gcc_assert (REFERENCE_REF_P (argument));
9452	      argument = TREE_OPERAND (argument, 0);
9453	    }
9454
9455	  if (TREE_CODE (argument) == VAR_DECL)
9456	    {
9457	      /* A variable without external linkage might still be a
9458		 valid constant-expression, so no error is issued here
9459		 if the external-linkage check fails.  */
9460	      if (!address_p && !DECL_EXTERNAL_LINKAGE_P (argument))
9461		cp_parser_simulate_error (parser);
9462	    }
9463	  else if (is_overloaded_fn (argument))
9464	    /* All overloaded functions are allowed; if the external
9465	       linkage test does not pass, an error will be issued
9466	       later.  */
9467	    ;
9468	  else if (address_p
9469		   && (TREE_CODE (argument) == OFFSET_REF
9470		       || TREE_CODE (argument) == SCOPE_REF))
9471	    /* A pointer-to-member.  */
9472	    ;
9473	  else if (TREE_CODE (argument) == TEMPLATE_PARM_INDEX)
9474	    ;
9475	  else
9476	    cp_parser_simulate_error (parser);
9477
9478	  if (cp_parser_parse_definitely (parser))
9479	    {
9480	      if (address_p)
9481		argument = build_x_unary_op (ADDR_EXPR, argument);
9482	      return argument;
9483	    }
9484	}
9485    }
9486  /* If the argument started with "&", there are no other valid
9487     alternatives at this point.  */
9488  if (address_p)
9489    {
9490      cp_parser_error (parser, "invalid non-type template argument");
9491      return error_mark_node;
9492    }
9493
9494  /* If the argument wasn't successfully parsed as a type-id followed
9495     by '>>', the argument can only be a constant expression now.
9496     Otherwise, we try parsing the constant-expression tentatively,
9497     because the argument could really be a type-id.  */
9498  if (maybe_type_id)
9499    cp_parser_parse_tentatively (parser);
9500  argument = cp_parser_constant_expression (parser,
9501					    /*allow_non_constant_p=*/false,
9502					    /*non_constant_p=*/NULL);
9503  argument = fold_non_dependent_expr (argument);
9504  if (!maybe_type_id)
9505    return argument;
9506  if (!cp_parser_next_token_ends_template_argument_p (parser))
9507    cp_parser_error (parser, "expected template-argument");
9508  if (cp_parser_parse_definitely (parser))
9509    return argument;
9510  /* We did our best to parse the argument as a non type-id, but that
9511     was the only alternative that matched (albeit with a '>' after
9512     it). We can assume it's just a typo from the user, and a
9513     diagnostic will then be issued.  */
9514  return cp_parser_type_id (parser);
9515}
9516
9517/* Parse an explicit-instantiation.
9518
9519   explicit-instantiation:
9520     template declaration
9521
9522   Although the standard says `declaration', what it really means is:
9523
9524   explicit-instantiation:
9525     template decl-specifier-seq [opt] declarator [opt] ;
9526
9527   Things like `template int S<int>::i = 5, int S<double>::j;' are not
9528   supposed to be allowed.  A defect report has been filed about this
9529   issue.
9530
9531   GNU Extension:
9532
9533   explicit-instantiation:
9534     storage-class-specifier template
9535       decl-specifier-seq [opt] declarator [opt] ;
9536     function-specifier template
9537       decl-specifier-seq [opt] declarator [opt] ;  */
9538
9539static void
9540cp_parser_explicit_instantiation (cp_parser* parser)
9541{
9542  int declares_class_or_enum;
9543  cp_decl_specifier_seq decl_specifiers;
9544  tree extension_specifier = NULL_TREE;
9545
9546  /* Look for an (optional) storage-class-specifier or
9547     function-specifier.  */
9548  if (cp_parser_allow_gnu_extensions_p (parser))
9549    {
9550      extension_specifier
9551	= cp_parser_storage_class_specifier_opt (parser);
9552      if (!extension_specifier)
9553	extension_specifier
9554	  = cp_parser_function_specifier_opt (parser,
9555					      /*decl_specs=*/NULL);
9556    }
9557
9558  /* Look for the `template' keyword.  */
9559  cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9560  /* Let the front end know that we are processing an explicit
9561     instantiation.  */
9562  begin_explicit_instantiation ();
9563  /* [temp.explicit] says that we are supposed to ignore access
9564     control while processing explicit instantiation directives.  */
9565  push_deferring_access_checks (dk_no_check);
9566  /* Parse a decl-specifier-seq.  */
9567  cp_parser_decl_specifier_seq (parser,
9568				CP_PARSER_FLAGS_OPTIONAL,
9569				&decl_specifiers,
9570				&declares_class_or_enum);
9571  /* If there was exactly one decl-specifier, and it declared a class,
9572     and there's no declarator, then we have an explicit type
9573     instantiation.  */
9574  if (declares_class_or_enum && cp_parser_declares_only_class_p (parser))
9575    {
9576      tree type;
9577
9578      type = check_tag_decl (&decl_specifiers);
9579      /* Turn access control back on for names used during
9580	 template instantiation.  */
9581      pop_deferring_access_checks ();
9582      if (type)
9583	do_type_instantiation (type, extension_specifier,
9584			       /*complain=*/tf_error);
9585    }
9586  else
9587    {
9588      cp_declarator *declarator;
9589      tree decl;
9590
9591      /* Parse the declarator.  */
9592      declarator
9593	= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
9594				/*ctor_dtor_or_conv_p=*/NULL,
9595				/*parenthesized_p=*/NULL,
9596				/*member_p=*/false);
9597      if (declares_class_or_enum & 2)
9598	cp_parser_check_for_definition_in_return_type (declarator,
9599						       decl_specifiers.type);
9600      if (declarator != cp_error_declarator)
9601	{
9602	  decl = grokdeclarator (declarator, &decl_specifiers,
9603				 NORMAL, 0, &decl_specifiers.attributes);
9604	  /* Turn access control back on for names used during
9605	     template instantiation.  */
9606	  pop_deferring_access_checks ();
9607	  /* Do the explicit instantiation.  */
9608	  do_decl_instantiation (decl, extension_specifier);
9609	}
9610      else
9611	{
9612	  pop_deferring_access_checks ();
9613	  /* Skip the body of the explicit instantiation.  */
9614	  cp_parser_skip_to_end_of_statement (parser);
9615	}
9616    }
9617  /* We're done with the instantiation.  */
9618  end_explicit_instantiation ();
9619
9620  cp_parser_consume_semicolon_at_end_of_statement (parser);
9621}
9622
9623/* Parse an explicit-specialization.
9624
9625   explicit-specialization:
9626     template < > declaration
9627
9628   Although the standard says `declaration', what it really means is:
9629
9630   explicit-specialization:
9631     template <> decl-specifier [opt] init-declarator [opt] ;
9632     template <> function-definition
9633     template <> explicit-specialization
9634     template <> template-declaration  */
9635
9636static void
9637cp_parser_explicit_specialization (cp_parser* parser)
9638{
9639  bool need_lang_pop;
9640  /* Look for the `template' keyword.  */
9641  cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'");
9642  /* Look for the `<'.  */
9643  cp_parser_require (parser, CPP_LESS, "`<'");
9644  /* Look for the `>'.  */
9645  cp_parser_require (parser, CPP_GREATER, "`>'");
9646  /* We have processed another parameter list.  */
9647  ++parser->num_template_parameter_lists;
9648  /* [temp]
9649
9650     A template ... explicit specialization ... shall not have C
9651     linkage.  */
9652  if (current_lang_name == lang_name_c)
9653    {
9654      error ("template specialization with C linkage");
9655      /* Give it C++ linkage to avoid confusing other parts of the
9656	 front end.  */
9657      push_lang_context (lang_name_cplusplus);
9658      need_lang_pop = true;
9659    }
9660  else
9661    need_lang_pop = false;
9662  /* Let the front end know that we are beginning a specialization.  */
9663  if (!begin_specialization ())
9664    {
9665      end_specialization ();
9666      cp_parser_skip_to_end_of_block_or_statement (parser);
9667      return;
9668    }
9669
9670  /* If the next keyword is `template', we need to figure out whether
9671     or not we're looking a template-declaration.  */
9672  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
9673    {
9674      if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
9675	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type != CPP_GREATER)
9676	cp_parser_template_declaration_after_export (parser,
9677						     /*member_p=*/false);
9678      else
9679	cp_parser_explicit_specialization (parser);
9680    }
9681  else
9682    /* Parse the dependent declaration.  */
9683    cp_parser_single_declaration (parser,
9684				  /*checks=*/NULL,
9685				  /*member_p=*/false,
9686				  /*friend_p=*/NULL);
9687  /* We're done with the specialization.  */
9688  end_specialization ();
9689  /* For the erroneous case of a template with C linkage, we pushed an
9690     implicit C++ linkage scope; exit that scope now.  */
9691  if (need_lang_pop)
9692    pop_lang_context ();
9693  /* We're done with this parameter list.  */
9694  --parser->num_template_parameter_lists;
9695}
9696
9697/* Parse a type-specifier.
9698
9699   type-specifier:
9700     simple-type-specifier
9701     class-specifier
9702     enum-specifier
9703     elaborated-type-specifier
9704     cv-qualifier
9705
9706   GNU Extension:
9707
9708   type-specifier:
9709     __complex__
9710
9711   Returns a representation of the type-specifier.  For a
9712   class-specifier, enum-specifier, or elaborated-type-specifier, a
9713   TREE_TYPE is returned; otherwise, a TYPE_DECL is returned.
9714
9715   The parser flags FLAGS is used to control type-specifier parsing.
9716
9717   If IS_DECLARATION is TRUE, then this type-specifier is appearing
9718   in a decl-specifier-seq.
9719
9720   If DECLARES_CLASS_OR_ENUM is non-NULL, and the type-specifier is a
9721   class-specifier, enum-specifier, or elaborated-type-specifier, then
9722   *DECLARES_CLASS_OR_ENUM is set to a nonzero value.  The value is 1
9723   if a type is declared; 2 if it is defined.  Otherwise, it is set to
9724   zero.
9725
9726   If IS_CV_QUALIFIER is non-NULL, and the type-specifier is a
9727   cv-qualifier, then IS_CV_QUALIFIER is set to TRUE.  Otherwise, it
9728   is set to FALSE.  */
9729
9730static tree
9731cp_parser_type_specifier (cp_parser* parser,
9732			  cp_parser_flags flags,
9733			  cp_decl_specifier_seq *decl_specs,
9734			  bool is_declaration,
9735			  int* declares_class_or_enum,
9736			  bool* is_cv_qualifier)
9737{
9738  tree type_spec = NULL_TREE;
9739  cp_token *token;
9740  enum rid keyword;
9741  cp_decl_spec ds = ds_last;
9742
9743  /* Assume this type-specifier does not declare a new type.  */
9744  if (declares_class_or_enum)
9745    *declares_class_or_enum = 0;
9746  /* And that it does not specify a cv-qualifier.  */
9747  if (is_cv_qualifier)
9748    *is_cv_qualifier = false;
9749  /* Peek at the next token.  */
9750  token = cp_lexer_peek_token (parser->lexer);
9751
9752  /* If we're looking at a keyword, we can use that to guide the
9753     production we choose.  */
9754  keyword = token->keyword;
9755  switch (keyword)
9756    {
9757    case RID_ENUM:
9758      /* Look for the enum-specifier.  */
9759      type_spec = cp_parser_enum_specifier (parser);
9760      /* If that worked, we're done.  */
9761      if (type_spec)
9762	{
9763	  if (declares_class_or_enum)
9764	    *declares_class_or_enum = 2;
9765	  if (decl_specs)
9766	    cp_parser_set_decl_spec_type (decl_specs,
9767					  type_spec,
9768					  /*user_defined_p=*/true);
9769	  return type_spec;
9770	}
9771      else
9772	goto elaborated_type_specifier;
9773
9774      /* Any of these indicate either a class-specifier, or an
9775	 elaborated-type-specifier.  */
9776    case RID_CLASS:
9777    case RID_STRUCT:
9778    case RID_UNION:
9779      /* Parse tentatively so that we can back up if we don't find a
9780	 class-specifier.  */
9781      cp_parser_parse_tentatively (parser);
9782      /* Look for the class-specifier.  */
9783      type_spec = cp_parser_class_specifier (parser);
9784      /* If that worked, we're done.  */
9785      if (cp_parser_parse_definitely (parser))
9786	{
9787	  if (declares_class_or_enum)
9788	    *declares_class_or_enum = 2;
9789	  if (decl_specs)
9790	    cp_parser_set_decl_spec_type (decl_specs,
9791					  type_spec,
9792					  /*user_defined_p=*/true);
9793	  return type_spec;
9794	}
9795
9796      /* Fall through.  */
9797    elaborated_type_specifier:
9798      /* We're declaring (not defining) a class or enum.  */
9799      if (declares_class_or_enum)
9800	*declares_class_or_enum = 1;
9801
9802      /* Fall through.  */
9803    case RID_TYPENAME:
9804      /* Look for an elaborated-type-specifier.  */
9805      type_spec
9806	= (cp_parser_elaborated_type_specifier
9807	   (parser,
9808	    decl_specs && decl_specs->specs[(int) ds_friend],
9809	    is_declaration));
9810      if (decl_specs)
9811	cp_parser_set_decl_spec_type (decl_specs,
9812				      type_spec,
9813				      /*user_defined_p=*/true);
9814      return type_spec;
9815
9816    case RID_CONST:
9817      ds = ds_const;
9818      if (is_cv_qualifier)
9819	*is_cv_qualifier = true;
9820      break;
9821
9822    case RID_VOLATILE:
9823      ds = ds_volatile;
9824      if (is_cv_qualifier)
9825	*is_cv_qualifier = true;
9826      break;
9827
9828    case RID_RESTRICT:
9829      ds = ds_restrict;
9830      if (is_cv_qualifier)
9831	*is_cv_qualifier = true;
9832      break;
9833
9834    case RID_COMPLEX:
9835      /* The `__complex__' keyword is a GNU extension.  */
9836      ds = ds_complex;
9837      break;
9838
9839    default:
9840      break;
9841    }
9842
9843  /* Handle simple keywords.  */
9844  if (ds != ds_last)
9845    {
9846      if (decl_specs)
9847	{
9848	  ++decl_specs->specs[(int)ds];
9849	  decl_specs->any_specifiers_p = true;
9850	}
9851      return cp_lexer_consume_token (parser->lexer)->u.value;
9852    }
9853
9854  /* If we do not already have a type-specifier, assume we are looking
9855     at a simple-type-specifier.  */
9856  type_spec = cp_parser_simple_type_specifier (parser,
9857					       decl_specs,
9858					       flags);
9859
9860  /* If we didn't find a type-specifier, and a type-specifier was not
9861     optional in this context, issue an error message.  */
9862  if (!type_spec && !(flags & CP_PARSER_FLAGS_OPTIONAL))
9863    {
9864      cp_parser_error (parser, "expected type specifier");
9865      return error_mark_node;
9866    }
9867
9868  return type_spec;
9869}
9870
9871/* Parse a simple-type-specifier.
9872
9873   simple-type-specifier:
9874     :: [opt] nested-name-specifier [opt] type-name
9875     :: [opt] nested-name-specifier template template-id
9876     char
9877     wchar_t
9878     bool
9879     short
9880     int
9881     long
9882     signed
9883     unsigned
9884     float
9885     double
9886     void
9887
9888   GNU Extension:
9889
9890   simple-type-specifier:
9891     __typeof__ unary-expression
9892     __typeof__ ( type-id )
9893
9894   Returns the indicated TYPE_DECL.  If DECL_SPECS is not NULL, it is
9895   appropriately updated.  */
9896
9897static tree
9898cp_parser_simple_type_specifier (cp_parser* parser,
9899				 cp_decl_specifier_seq *decl_specs,
9900				 cp_parser_flags flags)
9901{
9902  tree type = NULL_TREE;
9903  cp_token *token;
9904
9905  /* Peek at the next token.  */
9906  token = cp_lexer_peek_token (parser->lexer);
9907
9908  /* If we're looking at a keyword, things are easy.  */
9909  switch (token->keyword)
9910    {
9911    case RID_CHAR:
9912      if (decl_specs)
9913	decl_specs->explicit_char_p = true;
9914      type = char_type_node;
9915      break;
9916    case RID_WCHAR:
9917      type = wchar_type_node;
9918      break;
9919    case RID_BOOL:
9920      type = boolean_type_node;
9921      break;
9922    case RID_SHORT:
9923      if (decl_specs)
9924	++decl_specs->specs[(int) ds_short];
9925      type = short_integer_type_node;
9926      break;
9927    case RID_INT:
9928      if (decl_specs)
9929	decl_specs->explicit_int_p = true;
9930      type = integer_type_node;
9931      break;
9932    case RID_LONG:
9933      if (decl_specs)
9934	++decl_specs->specs[(int) ds_long];
9935      type = long_integer_type_node;
9936      break;
9937    case RID_SIGNED:
9938      if (decl_specs)
9939	++decl_specs->specs[(int) ds_signed];
9940      type = integer_type_node;
9941      break;
9942    case RID_UNSIGNED:
9943      if (decl_specs)
9944	++decl_specs->specs[(int) ds_unsigned];
9945      type = unsigned_type_node;
9946      break;
9947    case RID_FLOAT:
9948      type = float_type_node;
9949      break;
9950    case RID_DOUBLE:
9951      type = double_type_node;
9952      break;
9953    case RID_VOID:
9954      type = void_type_node;
9955      break;
9956
9957    case RID_TYPEOF:
9958      /* Consume the `typeof' token.  */
9959      cp_lexer_consume_token (parser->lexer);
9960      /* Parse the operand to `typeof'.  */
9961      type = cp_parser_sizeof_operand (parser, RID_TYPEOF);
9962      /* If it is not already a TYPE, take its type.  */
9963      if (!TYPE_P (type))
9964	type = finish_typeof (type);
9965
9966      if (decl_specs)
9967	cp_parser_set_decl_spec_type (decl_specs, type,
9968				      /*user_defined_p=*/true);
9969
9970      return type;
9971
9972    default:
9973      break;
9974    }
9975
9976  /* If the type-specifier was for a built-in type, we're done.  */
9977  if (type)
9978    {
9979      tree id;
9980
9981      /* Record the type.  */
9982      if (decl_specs
9983	  && (token->keyword != RID_SIGNED
9984	      && token->keyword != RID_UNSIGNED
9985	      && token->keyword != RID_SHORT
9986	      && token->keyword != RID_LONG))
9987	cp_parser_set_decl_spec_type (decl_specs,
9988				      type,
9989				      /*user_defined=*/false);
9990      if (decl_specs)
9991	decl_specs->any_specifiers_p = true;
9992
9993      /* Consume the token.  */
9994      id = cp_lexer_consume_token (parser->lexer)->u.value;
9995
9996      /* There is no valid C++ program where a non-template type is
9997	 followed by a "<".  That usually indicates that the user thought
9998	 that the type was a template.  */
9999      cp_parser_check_for_invalid_template_id (parser, type);
10000
10001      return TYPE_NAME (type);
10002    }
10003
10004  /* The type-specifier must be a user-defined type.  */
10005  if (!(flags & CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES))
10006    {
10007      bool qualified_p;
10008      bool global_p;
10009
10010      /* Don't gobble tokens or issue error messages if this is an
10011	 optional type-specifier.  */
10012      if (flags & CP_PARSER_FLAGS_OPTIONAL)
10013	cp_parser_parse_tentatively (parser);
10014
10015      /* Look for the optional `::' operator.  */
10016      global_p
10017	= (cp_parser_global_scope_opt (parser,
10018				       /*current_scope_valid_p=*/false)
10019	   != NULL_TREE);
10020      /* Look for the nested-name specifier.  */
10021      qualified_p
10022	= (cp_parser_nested_name_specifier_opt (parser,
10023						/*typename_keyword_p=*/false,
10024						/*check_dependency_p=*/true,
10025						/*type_p=*/false,
10026						/*is_declaration=*/false)
10027	   != NULL_TREE);
10028      /* If we have seen a nested-name-specifier, and the next token
10029	 is `template', then we are using the template-id production.  */
10030      if (parser->scope
10031	  && cp_parser_optional_template_keyword (parser))
10032	{
10033	  /* Look for the template-id.  */
10034	  type = cp_parser_template_id (parser,
10035					/*template_keyword_p=*/true,
10036					/*check_dependency_p=*/true,
10037					/*is_declaration=*/false);
10038	  /* If the template-id did not name a type, we are out of
10039	     luck.  */
10040	  if (TREE_CODE (type) != TYPE_DECL)
10041	    {
10042	      cp_parser_error (parser, "expected template-id for type");
10043	      type = NULL_TREE;
10044	    }
10045	}
10046      /* Otherwise, look for a type-name.  */
10047      else
10048	type = cp_parser_type_name (parser);
10049      /* Keep track of all name-lookups performed in class scopes.  */
10050      if (type
10051	  && !global_p
10052	  && !qualified_p
10053	  && TREE_CODE (type) == TYPE_DECL
10054	  && TREE_CODE (DECL_NAME (type)) == IDENTIFIER_NODE)
10055	maybe_note_name_used_in_class (DECL_NAME (type), type);
10056      /* If it didn't work out, we don't have a TYPE.  */
10057      if ((flags & CP_PARSER_FLAGS_OPTIONAL)
10058	  && !cp_parser_parse_definitely (parser))
10059	type = NULL_TREE;
10060      if (type && decl_specs)
10061	cp_parser_set_decl_spec_type (decl_specs, type,
10062				      /*user_defined=*/true);
10063    }
10064
10065  /* If we didn't get a type-name, issue an error message.  */
10066  if (!type && !(flags & CP_PARSER_FLAGS_OPTIONAL))
10067    {
10068      cp_parser_error (parser, "expected type-name");
10069      return error_mark_node;
10070    }
10071
10072  /* There is no valid C++ program where a non-template type is
10073     followed by a "<".  That usually indicates that the user thought
10074     that the type was a template.  */
10075  if (type && type != error_mark_node)
10076    {
10077      /* As a last-ditch effort, see if TYPE is an Objective-C type.
10078	 If it is, then the '<'...'>' enclose protocol names rather than
10079	 template arguments, and so everything is fine.  */
10080      if (c_dialect_objc ()
10081	  && (objc_is_id (type) || objc_is_class_name (type)))
10082	{
10083	  tree protos = cp_parser_objc_protocol_refs_opt (parser);
10084	  tree qual_type = objc_get_protocol_qualified_type (type, protos);
10085
10086	  /* Clobber the "unqualified" type previously entered into
10087	     DECL_SPECS with the new, improved protocol-qualified version.  */
10088	  if (decl_specs)
10089	    decl_specs->type = qual_type;
10090
10091	  return qual_type;
10092	}
10093
10094      cp_parser_check_for_invalid_template_id (parser, TREE_TYPE (type));
10095    }
10096
10097  return type;
10098}
10099
10100/* Parse a type-name.
10101
10102   type-name:
10103     class-name
10104     enum-name
10105     typedef-name
10106
10107   enum-name:
10108     identifier
10109
10110   typedef-name:
10111     identifier
10112
10113   Returns a TYPE_DECL for the type.  */
10114
10115static tree
10116cp_parser_type_name (cp_parser* parser)
10117{
10118  tree type_decl;
10119  tree identifier;
10120
10121  /* We can't know yet whether it is a class-name or not.  */
10122  cp_parser_parse_tentatively (parser);
10123  /* Try a class-name.  */
10124  type_decl = cp_parser_class_name (parser,
10125				    /*typename_keyword_p=*/false,
10126				    /*template_keyword_p=*/false,
10127				    none_type,
10128				    /*check_dependency_p=*/true,
10129				    /*class_head_p=*/false,
10130				    /*is_declaration=*/false);
10131  /* If it's not a class-name, keep looking.  */
10132  if (!cp_parser_parse_definitely (parser))
10133    {
10134      /* It must be a typedef-name or an enum-name.  */
10135      identifier = cp_parser_identifier (parser);
10136      if (identifier == error_mark_node)
10137	return error_mark_node;
10138
10139      /* Look up the type-name.  */
10140      type_decl = cp_parser_lookup_name_simple (parser, identifier);
10141
10142      if (TREE_CODE (type_decl) != TYPE_DECL
10143	  && (objc_is_id (identifier) || objc_is_class_name (identifier)))
10144	{
10145	  /* See if this is an Objective-C type.  */
10146	  tree protos = cp_parser_objc_protocol_refs_opt (parser);
10147	  tree type = objc_get_protocol_qualified_type (identifier, protos);
10148	  if (type)
10149	    type_decl = TYPE_NAME (type);
10150	}
10151
10152      /* Issue an error if we did not find a type-name.  */
10153      if (TREE_CODE (type_decl) != TYPE_DECL)
10154	{
10155	  if (!cp_parser_simulate_error (parser))
10156	    cp_parser_name_lookup_error (parser, identifier, type_decl,
10157					 "is not a type");
10158	  type_decl = error_mark_node;
10159	}
10160      /* Remember that the name was used in the definition of the
10161	 current class so that we can check later to see if the
10162	 meaning would have been different after the class was
10163	 entirely defined.  */
10164      else if (type_decl != error_mark_node
10165	       && !parser->scope)
10166	maybe_note_name_used_in_class (identifier, type_decl);
10167    }
10168
10169  return type_decl;
10170}
10171
10172
10173/* Parse an elaborated-type-specifier.  Note that the grammar given
10174   here incorporates the resolution to DR68.
10175
10176   elaborated-type-specifier:
10177     class-key :: [opt] nested-name-specifier [opt] identifier
10178     class-key :: [opt] nested-name-specifier [opt] template [opt] template-id
10179     enum :: [opt] nested-name-specifier [opt] identifier
10180     typename :: [opt] nested-name-specifier identifier
10181     typename :: [opt] nested-name-specifier template [opt]
10182       template-id
10183
10184   GNU extension:
10185
10186   elaborated-type-specifier:
10187     class-key attributes :: [opt] nested-name-specifier [opt] identifier
10188     class-key attributes :: [opt] nested-name-specifier [opt]
10189	       template [opt] template-id
10190     enum attributes :: [opt] nested-name-specifier [opt] identifier
10191
10192   If IS_FRIEND is TRUE, then this elaborated-type-specifier is being
10193   declared `friend'.  If IS_DECLARATION is TRUE, then this
10194   elaborated-type-specifier appears in a decl-specifiers-seq, i.e.,
10195   something is being declared.
10196
10197   Returns the TYPE specified.  */
10198
10199static tree
10200cp_parser_elaborated_type_specifier (cp_parser* parser,
10201				     bool is_friend,
10202				     bool is_declaration)
10203{
10204  enum tag_types tag_type;
10205  tree identifier;
10206  tree type = NULL_TREE;
10207  tree attributes = NULL_TREE;
10208
10209  /* See if we're looking at the `enum' keyword.  */
10210  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ENUM))
10211    {
10212      /* Consume the `enum' token.  */
10213      cp_lexer_consume_token (parser->lexer);
10214      /* Remember that it's an enumeration type.  */
10215      tag_type = enum_type;
10216      /* Parse the attributes.  */
10217      attributes = cp_parser_attributes_opt (parser);
10218    }
10219  /* Or, it might be `typename'.  */
10220  else if (cp_lexer_next_token_is_keyword (parser->lexer,
10221					   RID_TYPENAME))
10222    {
10223      /* Consume the `typename' token.  */
10224      cp_lexer_consume_token (parser->lexer);
10225      /* Remember that it's a `typename' type.  */
10226      tag_type = typename_type;
10227      /* The `typename' keyword is only allowed in templates.  */
10228      if (!processing_template_decl)
10229	pedwarn ("using %<typename%> outside of template");
10230    }
10231  /* Otherwise it must be a class-key.  */
10232  else
10233    {
10234      tag_type = cp_parser_class_key (parser);
10235      if (tag_type == none_type)
10236	return error_mark_node;
10237      /* Parse the attributes.  */
10238      attributes = cp_parser_attributes_opt (parser);
10239    }
10240
10241  /* Look for the `::' operator.  */
10242  cp_parser_global_scope_opt (parser,
10243			      /*current_scope_valid_p=*/false);
10244  /* Look for the nested-name-specifier.  */
10245  if (tag_type == typename_type)
10246    {
10247      if (!cp_parser_nested_name_specifier (parser,
10248					   /*typename_keyword_p=*/true,
10249					   /*check_dependency_p=*/true,
10250					   /*type_p=*/true,
10251					    is_declaration))
10252	return error_mark_node;
10253    }
10254  else
10255    /* Even though `typename' is not present, the proposed resolution
10256       to Core Issue 180 says that in `class A<T>::B', `B' should be
10257       considered a type-name, even if `A<T>' is dependent.  */
10258    cp_parser_nested_name_specifier_opt (parser,
10259					 /*typename_keyword_p=*/true,
10260					 /*check_dependency_p=*/true,
10261					 /*type_p=*/true,
10262					 is_declaration);
10263  /* For everything but enumeration types, consider a template-id.
10264     For an enumeration type, consider only a plain identifier.  */
10265  if (tag_type != enum_type)
10266    {
10267      bool template_p = false;
10268      tree decl;
10269
10270      /* Allow the `template' keyword.  */
10271      template_p = cp_parser_optional_template_keyword (parser);
10272      /* If we didn't see `template', we don't know if there's a
10273	 template-id or not.  */
10274      if (!template_p)
10275	cp_parser_parse_tentatively (parser);
10276      /* Parse the template-id.  */
10277      decl = cp_parser_template_id (parser, template_p,
10278				    /*check_dependency_p=*/true,
10279				    is_declaration);
10280      /* If we didn't find a template-id, look for an ordinary
10281	 identifier.  */
10282      if (!template_p && !cp_parser_parse_definitely (parser))
10283	;
10284      /* If DECL is a TEMPLATE_ID_EXPR, and the `typename' keyword is
10285	 in effect, then we must assume that, upon instantiation, the
10286	 template will correspond to a class.  */
10287      else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
10288	       && tag_type == typename_type)
10289	type = make_typename_type (parser->scope, decl,
10290				   typename_type,
10291				   /*complain=*/tf_error);
10292      else
10293	type = TREE_TYPE (decl);
10294    }
10295
10296  if (!type)
10297    {
10298      identifier = cp_parser_identifier (parser);
10299
10300      if (identifier == error_mark_node)
10301	{
10302	  parser->scope = NULL_TREE;
10303	  return error_mark_node;
10304	}
10305
10306      /* For a `typename', we needn't call xref_tag.  */
10307      if (tag_type == typename_type
10308	  && TREE_CODE (parser->scope) != NAMESPACE_DECL)
10309	return cp_parser_make_typename_type (parser, parser->scope,
10310					     identifier);
10311      /* Look up a qualified name in the usual way.  */
10312      if (parser->scope)
10313	{
10314	  tree decl;
10315
10316	  decl = cp_parser_lookup_name (parser, identifier,
10317					tag_type,
10318					/*is_template=*/false,
10319					/*is_namespace=*/false,
10320					/*check_dependency=*/true,
10321					/*ambiguous_decls=*/NULL);
10322
10323	  /* If we are parsing friend declaration, DECL may be a
10324	     TEMPLATE_DECL tree node here.  However, we need to check
10325	     whether this TEMPLATE_DECL results in valid code.  Consider
10326	     the following example:
10327
10328	       namespace N {
10329		 template <class T> class C {};
10330	       }
10331	       class X {
10332		 template <class T> friend class N::C; // #1, valid code
10333	       };
10334	       template <class T> class Y {
10335		 friend class N::C;		       // #2, invalid code
10336	       };
10337
10338	     For both case #1 and #2, we arrive at a TEMPLATE_DECL after
10339	     name lookup of `N::C'.  We see that friend declaration must
10340	     be template for the code to be valid.  Note that
10341	     processing_template_decl does not work here since it is
10342	     always 1 for the above two cases.  */
10343
10344	  decl = (cp_parser_maybe_treat_template_as_class
10345		  (decl, /*tag_name_p=*/is_friend
10346			 && parser->num_template_parameter_lists));
10347
10348	  if (TREE_CODE (decl) != TYPE_DECL)
10349	    {
10350	      cp_parser_diagnose_invalid_type_name (parser,
10351						    parser->scope,
10352						    identifier);
10353	      return error_mark_node;
10354	    }
10355
10356	  if (TREE_CODE (TREE_TYPE (decl)) != TYPENAME_TYPE)
10357            {
10358              bool allow_template = (parser->num_template_parameter_lists
10359		                      || DECL_SELF_REFERENCE_P (decl));
10360              type = check_elaborated_type_specifier (tag_type, decl,
10361                                                      allow_template);
10362
10363              if (type == error_mark_node)
10364                return error_mark_node;
10365            }
10366
10367	  type = TREE_TYPE (decl);
10368	}
10369      else
10370	{
10371	  /* An elaborated-type-specifier sometimes introduces a new type and
10372	     sometimes names an existing type.  Normally, the rule is that it
10373	     introduces a new type only if there is not an existing type of
10374	     the same name already in scope.  For example, given:
10375
10376	       struct S {};
10377	       void f() { struct S s; }
10378
10379	     the `struct S' in the body of `f' is the same `struct S' as in
10380	     the global scope; the existing definition is used.  However, if
10381	     there were no global declaration, this would introduce a new
10382	     local class named `S'.
10383
10384	     An exception to this rule applies to the following code:
10385
10386	       namespace N { struct S; }
10387
10388	     Here, the elaborated-type-specifier names a new type
10389	     unconditionally; even if there is already an `S' in the
10390	     containing scope this declaration names a new type.
10391	     This exception only applies if the elaborated-type-specifier
10392	     forms the complete declaration:
10393
10394	       [class.name]
10395
10396	       A declaration consisting solely of `class-key identifier ;' is
10397	       either a redeclaration of the name in the current scope or a
10398	       forward declaration of the identifier as a class name.  It
10399	       introduces the name into the current scope.
10400
10401	     We are in this situation precisely when the next token is a `;'.
10402
10403	     An exception to the exception is that a `friend' declaration does
10404	     *not* name a new type; i.e., given:
10405
10406	       struct S { friend struct T; };
10407
10408	     `T' is not a new type in the scope of `S'.
10409
10410	     Also, `new struct S' or `sizeof (struct S)' never results in the
10411	     definition of a new type; a new type can only be declared in a
10412	     declaration context.  */
10413
10414	  tag_scope ts;
10415	  bool template_p;
10416
10417	  if (is_friend)
10418	    /* Friends have special name lookup rules.  */
10419	    ts = ts_within_enclosing_non_class;
10420	  else if (is_declaration
10421		   && cp_lexer_next_token_is (parser->lexer,
10422					      CPP_SEMICOLON))
10423	    /* This is a `class-key identifier ;' */
10424	    ts = ts_current;
10425	  else
10426	    ts = ts_global;
10427
10428	  template_p =
10429	    (parser->num_template_parameter_lists
10430	     && (cp_parser_next_token_starts_class_definition_p (parser)
10431		 || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)));
10432	  /* An unqualified name was used to reference this type, so
10433	     there were no qualifying templates.  */
10434	  if (!cp_parser_check_template_parameters (parser,
10435						    /*num_templates=*/0))
10436	    return error_mark_node;
10437	  type = xref_tag (tag_type, identifier, ts, template_p);
10438	}
10439    }
10440
10441  if (type == error_mark_node)
10442    return error_mark_node;
10443
10444  /* Allow attributes on forward declarations of classes.  */
10445  if (attributes)
10446    {
10447      if (TREE_CODE (type) == TYPENAME_TYPE)
10448	warning (OPT_Wattributes,
10449		 "attributes ignored on uninstantiated type");
10450      else if (tag_type != enum_type && CLASSTYPE_TEMPLATE_INSTANTIATION (type)
10451	       && ! processing_explicit_instantiation)
10452	warning (OPT_Wattributes,
10453		 "attributes ignored on template instantiation");
10454      else if (is_declaration && cp_parser_declares_only_class_p (parser))
10455	cplus_decl_attributes (&type, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
10456      else
10457	warning (OPT_Wattributes,
10458		 "attributes ignored on elaborated-type-specifier that is not a forward declaration");
10459    }
10460
10461  if (tag_type != enum_type)
10462    cp_parser_check_class_key (tag_type, type);
10463
10464  /* A "<" cannot follow an elaborated type specifier.  If that
10465     happens, the user was probably trying to form a template-id.  */
10466  cp_parser_check_for_invalid_template_id (parser, type);
10467
10468  return type;
10469}
10470
10471/* Parse an enum-specifier.
10472
10473   enum-specifier:
10474     enum identifier [opt] { enumerator-list [opt] }
10475
10476   GNU Extensions:
10477     enum attributes[opt] identifier [opt] { enumerator-list [opt] }
10478       attributes[opt]
10479
10480   Returns an ENUM_TYPE representing the enumeration, or NULL_TREE
10481   if the token stream isn't an enum-specifier after all.  */
10482
10483static tree
10484cp_parser_enum_specifier (cp_parser* parser)
10485{
10486  tree identifier;
10487  tree type;
10488  tree attributes;
10489
10490  /* Parse tentatively so that we can back up if we don't find a
10491     enum-specifier.  */
10492  cp_parser_parse_tentatively (parser);
10493
10494  /* Caller guarantees that the current token is 'enum', an identifier
10495     possibly follows, and the token after that is an opening brace.
10496     If we don't have an identifier, fabricate an anonymous name for
10497     the enumeration being defined.  */
10498  cp_lexer_consume_token (parser->lexer);
10499
10500  attributes = cp_parser_attributes_opt (parser);
10501
10502  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10503    identifier = cp_parser_identifier (parser);
10504  else
10505    identifier = make_anon_name ();
10506
10507  /* Look for the `{' but don't consume it yet.  */
10508  if (!cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
10509    cp_parser_simulate_error (parser);
10510
10511  if (!cp_parser_parse_definitely (parser))
10512    return NULL_TREE;
10513
10514  /* Issue an error message if type-definitions are forbidden here.  */
10515  if (!cp_parser_check_type_definition (parser))
10516    type = error_mark_node;
10517  else
10518    /* Create the new type.  We do this before consuming the opening
10519       brace so the enum will be recorded as being on the line of its
10520       tag (or the 'enum' keyword, if there is no tag).  */
10521    type = start_enum (identifier);
10522
10523  /* Consume the opening brace.  */
10524  cp_lexer_consume_token (parser->lexer);
10525
10526  if (type == error_mark_node)
10527    {
10528      cp_parser_skip_to_end_of_block_or_statement (parser);
10529      return error_mark_node;
10530    }
10531
10532  /* If the next token is not '}', then there are some enumerators.  */
10533  if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
10534    cp_parser_enumerator_list (parser, type);
10535
10536  /* Consume the final '}'.  */
10537  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10538
10539  /* Look for trailing attributes to apply to this enumeration, and
10540     apply them if appropriate.  */
10541  if (cp_parser_allow_gnu_extensions_p (parser))
10542    {
10543      tree trailing_attr = cp_parser_attributes_opt (parser);
10544      cplus_decl_attributes (&type,
10545			     trailing_attr,
10546			     (int) ATTR_FLAG_TYPE_IN_PLACE);
10547    }
10548
10549  /* Finish up the enumeration.  */
10550  finish_enum (type);
10551
10552  return type;
10553}
10554
10555/* Parse an enumerator-list.  The enumerators all have the indicated
10556   TYPE.
10557
10558   enumerator-list:
10559     enumerator-definition
10560     enumerator-list , enumerator-definition  */
10561
10562static void
10563cp_parser_enumerator_list (cp_parser* parser, tree type)
10564{
10565  while (true)
10566    {
10567      /* Parse an enumerator-definition.  */
10568      cp_parser_enumerator_definition (parser, type);
10569
10570      /* If the next token is not a ',', we've reached the end of
10571	 the list.  */
10572      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
10573	break;
10574      /* Otherwise, consume the `,' and keep going.  */
10575      cp_lexer_consume_token (parser->lexer);
10576      /* If the next token is a `}', there is a trailing comma.  */
10577      if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
10578	{
10579	  if (pedantic && !in_system_header)
10580	    pedwarn ("comma at end of enumerator list");
10581	  break;
10582	}
10583    }
10584}
10585
10586/* Parse an enumerator-definition.  The enumerator has the indicated
10587   TYPE.
10588
10589   enumerator-definition:
10590     enumerator
10591     enumerator = constant-expression
10592
10593   enumerator:
10594     identifier  */
10595
10596static void
10597cp_parser_enumerator_definition (cp_parser* parser, tree type)
10598{
10599  tree identifier;
10600  tree value;
10601
10602  /* Look for the identifier.  */
10603  identifier = cp_parser_identifier (parser);
10604  if (identifier == error_mark_node)
10605    return;
10606
10607  /* If the next token is an '=', then there is an explicit value.  */
10608  if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
10609    {
10610      /* Consume the `=' token.  */
10611      cp_lexer_consume_token (parser->lexer);
10612      /* Parse the value.  */
10613      value = cp_parser_constant_expression (parser,
10614					     /*allow_non_constant_p=*/false,
10615					     NULL);
10616    }
10617  else
10618    value = NULL_TREE;
10619
10620  /* Create the enumerator.  */
10621  build_enumerator (identifier, value, type);
10622}
10623
10624/* Parse a namespace-name.
10625
10626   namespace-name:
10627     original-namespace-name
10628     namespace-alias
10629
10630   Returns the NAMESPACE_DECL for the namespace.  */
10631
10632static tree
10633cp_parser_namespace_name (cp_parser* parser)
10634{
10635  tree identifier;
10636  tree namespace_decl;
10637
10638  /* Get the name of the namespace.  */
10639  identifier = cp_parser_identifier (parser);
10640  if (identifier == error_mark_node)
10641    return error_mark_node;
10642
10643  /* Look up the identifier in the currently active scope.  Look only
10644     for namespaces, due to:
10645
10646       [basic.lookup.udir]
10647
10648       When looking up a namespace-name in a using-directive or alias
10649       definition, only namespace names are considered.
10650
10651     And:
10652
10653       [basic.lookup.qual]
10654
10655       During the lookup of a name preceding the :: scope resolution
10656       operator, object, function, and enumerator names are ignored.
10657
10658     (Note that cp_parser_class_or_namespace_name only calls this
10659     function if the token after the name is the scope resolution
10660     operator.)  */
10661  namespace_decl = cp_parser_lookup_name (parser, identifier,
10662					  none_type,
10663					  /*is_template=*/false,
10664					  /*is_namespace=*/true,
10665					  /*check_dependency=*/true,
10666					  /*ambiguous_decls=*/NULL);
10667  /* If it's not a namespace, issue an error.  */
10668  if (namespace_decl == error_mark_node
10669      || TREE_CODE (namespace_decl) != NAMESPACE_DECL)
10670    {
10671      if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
10672	error ("%qD is not a namespace-name", identifier);
10673      cp_parser_error (parser, "expected namespace-name");
10674      namespace_decl = error_mark_node;
10675    }
10676
10677  return namespace_decl;
10678}
10679
10680/* Parse a namespace-definition.
10681
10682   namespace-definition:
10683     named-namespace-definition
10684     unnamed-namespace-definition
10685
10686   named-namespace-definition:
10687     original-namespace-definition
10688     extension-namespace-definition
10689
10690   original-namespace-definition:
10691     namespace identifier { namespace-body }
10692
10693   extension-namespace-definition:
10694     namespace original-namespace-name { namespace-body }
10695
10696   unnamed-namespace-definition:
10697     namespace { namespace-body } */
10698
10699static void
10700cp_parser_namespace_definition (cp_parser* parser)
10701{
10702  tree identifier, attribs;
10703
10704  /* Look for the `namespace' keyword.  */
10705  cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10706
10707  /* Get the name of the namespace.  We do not attempt to distinguish
10708     between an original-namespace-definition and an
10709     extension-namespace-definition at this point.  The semantic
10710     analysis routines are responsible for that.  */
10711  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
10712    identifier = cp_parser_identifier (parser);
10713  else
10714    identifier = NULL_TREE;
10715
10716  /* Parse any specified attributes.  */
10717  attribs = cp_parser_attributes_opt (parser);
10718
10719  /* Look for the `{' to start the namespace.  */
10720  cp_parser_require (parser, CPP_OPEN_BRACE, "`{'");
10721  /* Start the namespace.  */
10722  push_namespace_with_attribs (identifier, attribs);
10723  /* Parse the body of the namespace.  */
10724  cp_parser_namespace_body (parser);
10725  /* Finish the namespace.  */
10726  pop_namespace ();
10727  /* Look for the final `}'.  */
10728  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
10729}
10730
10731/* Parse a namespace-body.
10732
10733   namespace-body:
10734     declaration-seq [opt]  */
10735
10736static void
10737cp_parser_namespace_body (cp_parser* parser)
10738{
10739  cp_parser_declaration_seq_opt (parser);
10740}
10741
10742/* Parse a namespace-alias-definition.
10743
10744   namespace-alias-definition:
10745     namespace identifier = qualified-namespace-specifier ;  */
10746
10747static void
10748cp_parser_namespace_alias_definition (cp_parser* parser)
10749{
10750  tree identifier;
10751  tree namespace_specifier;
10752
10753  /* Look for the `namespace' keyword.  */
10754  cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10755  /* Look for the identifier.  */
10756  identifier = cp_parser_identifier (parser);
10757  if (identifier == error_mark_node)
10758    return;
10759  /* Look for the `=' token.  */
10760  cp_parser_require (parser, CPP_EQ, "`='");
10761  /* Look for the qualified-namespace-specifier.  */
10762  namespace_specifier
10763    = cp_parser_qualified_namespace_specifier (parser);
10764  /* Look for the `;' token.  */
10765  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10766
10767  /* Register the alias in the symbol table.  */
10768  do_namespace_alias (identifier, namespace_specifier);
10769}
10770
10771/* Parse a qualified-namespace-specifier.
10772
10773   qualified-namespace-specifier:
10774     :: [opt] nested-name-specifier [opt] namespace-name
10775
10776   Returns a NAMESPACE_DECL corresponding to the specified
10777   namespace.  */
10778
10779static tree
10780cp_parser_qualified_namespace_specifier (cp_parser* parser)
10781{
10782  /* Look for the optional `::'.  */
10783  cp_parser_global_scope_opt (parser,
10784			      /*current_scope_valid_p=*/false);
10785
10786  /* Look for the optional nested-name-specifier.  */
10787  cp_parser_nested_name_specifier_opt (parser,
10788				       /*typename_keyword_p=*/false,
10789				       /*check_dependency_p=*/true,
10790				       /*type_p=*/false,
10791				       /*is_declaration=*/true);
10792
10793  return cp_parser_namespace_name (parser);
10794}
10795
10796/* Parse a using-declaration, or, if ACCESS_DECLARATION_P is true, an
10797   access declaration.
10798
10799   using-declaration:
10800     using typename [opt] :: [opt] nested-name-specifier unqualified-id ;
10801     using :: unqualified-id ;
10802
10803   access-declaration:
10804     qualified-id ;
10805
10806   */
10807
10808static bool
10809cp_parser_using_declaration (cp_parser* parser,
10810			     bool access_declaration_p)
10811{
10812  cp_token *token;
10813  bool typename_p = false;
10814  bool global_scope_p;
10815  tree decl;
10816  tree identifier;
10817  tree qscope;
10818
10819  if (access_declaration_p)
10820    cp_parser_parse_tentatively (parser);
10821  else
10822    {
10823      /* Look for the `using' keyword.  */
10824      cp_parser_require_keyword (parser, RID_USING, "`using'");
10825
10826      /* Peek at the next token.  */
10827      token = cp_lexer_peek_token (parser->lexer);
10828      /* See if it's `typename'.  */
10829      if (token->keyword == RID_TYPENAME)
10830	{
10831	  /* Remember that we've seen it.  */
10832	  typename_p = true;
10833	  /* Consume the `typename' token.  */
10834	  cp_lexer_consume_token (parser->lexer);
10835	}
10836    }
10837
10838  /* Look for the optional global scope qualification.  */
10839  global_scope_p
10840    = (cp_parser_global_scope_opt (parser,
10841				   /*current_scope_valid_p=*/false)
10842       != NULL_TREE);
10843
10844  /* If we saw `typename', or didn't see `::', then there must be a
10845     nested-name-specifier present.  */
10846  if (typename_p || !global_scope_p)
10847    qscope = cp_parser_nested_name_specifier (parser, typename_p,
10848					      /*check_dependency_p=*/true,
10849					      /*type_p=*/false,
10850					      /*is_declaration=*/true);
10851  /* Otherwise, we could be in either of the two productions.  In that
10852     case, treat the nested-name-specifier as optional.  */
10853  else
10854    qscope = cp_parser_nested_name_specifier_opt (parser,
10855						  /*typename_keyword_p=*/false,
10856						  /*check_dependency_p=*/true,
10857						  /*type_p=*/false,
10858						  /*is_declaration=*/true);
10859  if (!qscope)
10860    qscope = global_namespace;
10861
10862  if (access_declaration_p && cp_parser_error_occurred (parser))
10863    /* Something has already gone wrong; there's no need to parse
10864       further.  Since an error has occurred, the return value of
10865       cp_parser_parse_definitely will be false, as required.  */
10866    return cp_parser_parse_definitely (parser);
10867
10868  /* Parse the unqualified-id.  */
10869  identifier = cp_parser_unqualified_id (parser,
10870					 /*template_keyword_p=*/false,
10871					 /*check_dependency_p=*/true,
10872					 /*declarator_p=*/true,
10873					 /*optional_p=*/false);
10874
10875  if (access_declaration_p)
10876    {
10877      if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
10878	cp_parser_simulate_error (parser);
10879      if (!cp_parser_parse_definitely (parser))
10880	return false;
10881    }
10882
10883  /* The function we call to handle a using-declaration is different
10884     depending on what scope we are in.  */
10885  if (qscope == error_mark_node || identifier == error_mark_node)
10886    ;
10887  else if (TREE_CODE (identifier) != IDENTIFIER_NODE
10888	   && TREE_CODE (identifier) != BIT_NOT_EXPR)
10889    /* [namespace.udecl]
10890
10891       A using declaration shall not name a template-id.  */
10892    error ("a template-id may not appear in a using-declaration");
10893  else
10894    {
10895      if (at_class_scope_p ())
10896	{
10897	  /* Create the USING_DECL.  */
10898	  decl = do_class_using_decl (parser->scope, identifier);
10899	  /* Add it to the list of members in this class.  */
10900	  finish_member_declaration (decl);
10901	}
10902      else
10903	{
10904	  decl = cp_parser_lookup_name_simple (parser, identifier);
10905	  if (decl == error_mark_node)
10906	    cp_parser_name_lookup_error (parser, identifier, decl, NULL);
10907	  else if (!at_namespace_scope_p ())
10908	    do_local_using_decl (decl, qscope, identifier);
10909	  else
10910	    do_toplevel_using_decl (decl, qscope, identifier);
10911	}
10912    }
10913
10914  /* Look for the final `;'.  */
10915  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10916
10917  return true;
10918}
10919
10920/* Parse a using-directive.
10921
10922   using-directive:
10923     using namespace :: [opt] nested-name-specifier [opt]
10924       namespace-name ;  */
10925
10926static void
10927cp_parser_using_directive (cp_parser* parser)
10928{
10929  tree namespace_decl;
10930  tree attribs;
10931
10932  /* Look for the `using' keyword.  */
10933  cp_parser_require_keyword (parser, RID_USING, "`using'");
10934  /* And the `namespace' keyword.  */
10935  cp_parser_require_keyword (parser, RID_NAMESPACE, "`namespace'");
10936  /* Look for the optional `::' operator.  */
10937  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
10938  /* And the optional nested-name-specifier.  */
10939  cp_parser_nested_name_specifier_opt (parser,
10940				       /*typename_keyword_p=*/false,
10941				       /*check_dependency_p=*/true,
10942				       /*type_p=*/false,
10943				       /*is_declaration=*/true);
10944  /* Get the namespace being used.  */
10945  namespace_decl = cp_parser_namespace_name (parser);
10946  /* And any specified attributes.  */
10947  attribs = cp_parser_attributes_opt (parser);
10948  /* Update the symbol table.  */
10949  parse_using_directive (namespace_decl, attribs);
10950  /* Look for the final `;'.  */
10951  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
10952}
10953
10954/* Parse an asm-definition.
10955
10956   asm-definition:
10957     asm ( string-literal ) ;
10958
10959   GNU Extension:
10960
10961   asm-definition:
10962     asm volatile [opt] ( string-literal ) ;
10963     asm volatile [opt] ( string-literal : asm-operand-list [opt] ) ;
10964     asm volatile [opt] ( string-literal : asm-operand-list [opt]
10965			  : asm-operand-list [opt] ) ;
10966     asm volatile [opt] ( string-literal : asm-operand-list [opt]
10967			  : asm-operand-list [opt]
10968			  : asm-operand-list [opt] ) ;  */
10969
10970static void
10971cp_parser_asm_definition (cp_parser* parser)
10972{
10973  tree string;
10974  tree outputs = NULL_TREE;
10975  tree inputs = NULL_TREE;
10976  tree clobbers = NULL_TREE;
10977  tree asm_stmt;
10978  bool volatile_p = false;
10979  bool extended_p = false;
10980
10981  /* Look for the `asm' keyword.  */
10982  cp_parser_require_keyword (parser, RID_ASM, "`asm'");
10983  /* See if the next token is `volatile'.  */
10984  if (cp_parser_allow_gnu_extensions_p (parser)
10985      && cp_lexer_next_token_is_keyword (parser->lexer, RID_VOLATILE))
10986    {
10987      /* Remember that we saw the `volatile' keyword.  */
10988      volatile_p = true;
10989      /* Consume the token.  */
10990      cp_lexer_consume_token (parser->lexer);
10991    }
10992  /* Look for the opening `('.  */
10993  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
10994    return;
10995  /* Look for the string.  */
10996  string = cp_parser_string_literal (parser, false, false);
10997  if (string == error_mark_node)
10998    {
10999      cp_parser_skip_to_closing_parenthesis (parser, true, false,
11000					     /*consume_paren=*/true);
11001      return;
11002    }
11003
11004  /* If we're allowing GNU extensions, check for the extended assembly
11005     syntax.  Unfortunately, the `:' tokens need not be separated by
11006     a space in C, and so, for compatibility, we tolerate that here
11007     too.  Doing that means that we have to treat the `::' operator as
11008     two `:' tokens.  */
11009  if (cp_parser_allow_gnu_extensions_p (parser)
11010      && parser->in_function_body
11011      && (cp_lexer_next_token_is (parser->lexer, CPP_COLON)
11012	  || cp_lexer_next_token_is (parser->lexer, CPP_SCOPE)))
11013    {
11014      bool inputs_p = false;
11015      bool clobbers_p = false;
11016
11017      /* The extended syntax was used.  */
11018      extended_p = true;
11019
11020      /* Look for outputs.  */
11021      if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11022	{
11023	  /* Consume the `:'.  */
11024	  cp_lexer_consume_token (parser->lexer);
11025	  /* Parse the output-operands.  */
11026	  if (cp_lexer_next_token_is_not (parser->lexer,
11027					  CPP_COLON)
11028	      && cp_lexer_next_token_is_not (parser->lexer,
11029					     CPP_SCOPE)
11030	      && cp_lexer_next_token_is_not (parser->lexer,
11031					     CPP_CLOSE_PAREN))
11032	    outputs = cp_parser_asm_operand_list (parser);
11033	}
11034      /* If the next token is `::', there are no outputs, and the
11035	 next token is the beginning of the inputs.  */
11036      else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11037	/* The inputs are coming next.  */
11038	inputs_p = true;
11039
11040      /* Look for inputs.  */
11041      if (inputs_p
11042	  || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11043	{
11044	  /* Consume the `:' or `::'.  */
11045	  cp_lexer_consume_token (parser->lexer);
11046	  /* Parse the output-operands.  */
11047	  if (cp_lexer_next_token_is_not (parser->lexer,
11048					  CPP_COLON)
11049	      && cp_lexer_next_token_is_not (parser->lexer,
11050					     CPP_CLOSE_PAREN))
11051	    inputs = cp_parser_asm_operand_list (parser);
11052	}
11053      else if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
11054	/* The clobbers are coming next.  */
11055	clobbers_p = true;
11056
11057      /* Look for clobbers.  */
11058      if (clobbers_p
11059	  || cp_lexer_next_token_is (parser->lexer, CPP_COLON))
11060	{
11061	  /* Consume the `:' or `::'.  */
11062	  cp_lexer_consume_token (parser->lexer);
11063	  /* Parse the clobbers.  */
11064	  if (cp_lexer_next_token_is_not (parser->lexer,
11065					  CPP_CLOSE_PAREN))
11066	    clobbers = cp_parser_asm_clobber_list (parser);
11067	}
11068    }
11069  /* Look for the closing `)'.  */
11070  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11071    cp_parser_skip_to_closing_parenthesis (parser, true, false,
11072					   /*consume_paren=*/true);
11073  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
11074
11075  /* Create the ASM_EXPR.  */
11076  if (parser->in_function_body)
11077    {
11078      asm_stmt = finish_asm_stmt (volatile_p, string, outputs,
11079				  inputs, clobbers);
11080      /* If the extended syntax was not used, mark the ASM_EXPR.  */
11081      if (!extended_p)
11082	{
11083	  tree temp = asm_stmt;
11084	  if (TREE_CODE (temp) == CLEANUP_POINT_EXPR)
11085	    temp = TREE_OPERAND (temp, 0);
11086
11087	  ASM_INPUT_P (temp) = 1;
11088	}
11089    }
11090  else
11091    cgraph_add_asm_node (string);
11092}
11093
11094/* Declarators [gram.dcl.decl] */
11095
11096/* Parse an init-declarator.
11097
11098   init-declarator:
11099     declarator initializer [opt]
11100
11101   GNU Extension:
11102
11103   init-declarator:
11104     declarator asm-specification [opt] attributes [opt] initializer [opt]
11105
11106   function-definition:
11107     decl-specifier-seq [opt] declarator ctor-initializer [opt]
11108       function-body
11109     decl-specifier-seq [opt] declarator function-try-block
11110
11111   GNU Extension:
11112
11113   function-definition:
11114     __extension__ function-definition
11115
11116   The DECL_SPECIFIERS apply to this declarator.  Returns a
11117   representation of the entity declared.  If MEMBER_P is TRUE, then
11118   this declarator appears in a class scope.  The new DECL created by
11119   this declarator is returned.
11120
11121   The CHECKS are access checks that should be performed once we know
11122   what entity is being declared (and, therefore, what classes have
11123   befriended it).
11124
11125   If FUNCTION_DEFINITION_ALLOWED_P then we handle the declarator and
11126   for a function-definition here as well.  If the declarator is a
11127   declarator for a function-definition, *FUNCTION_DEFINITION_P will
11128   be TRUE upon return.  By that point, the function-definition will
11129   have been completely parsed.
11130
11131   FUNCTION_DEFINITION_P may be NULL if FUNCTION_DEFINITION_ALLOWED_P
11132   is FALSE.  */
11133
11134static tree
11135cp_parser_init_declarator (cp_parser* parser,
11136			   cp_decl_specifier_seq *decl_specifiers,
11137			   VEC (deferred_access_check,gc)* checks,
11138			   bool function_definition_allowed_p,
11139			   bool member_p,
11140			   int declares_class_or_enum,
11141			   bool* function_definition_p)
11142{
11143  cp_token *token;
11144  cp_declarator *declarator;
11145  tree prefix_attributes;
11146  tree attributes;
11147  tree asm_specification;
11148  tree initializer;
11149  tree decl = NULL_TREE;
11150  tree scope;
11151  bool is_initialized;
11152  /* Only valid if IS_INITIALIZED is true.  In that case, CPP_EQ if
11153     initialized with "= ..", CPP_OPEN_PAREN if initialized with
11154     "(...)".  */
11155  enum cpp_ttype initialization_kind;
11156  bool is_parenthesized_init = false;
11157  bool is_non_constant_init;
11158  int ctor_dtor_or_conv_p;
11159  bool friend_p;
11160  tree pushed_scope = NULL;
11161
11162  /* Gather the attributes that were provided with the
11163     decl-specifiers.  */
11164  prefix_attributes = decl_specifiers->attributes;
11165
11166  /* Assume that this is not the declarator for a function
11167     definition.  */
11168  if (function_definition_p)
11169    *function_definition_p = false;
11170
11171  /* Defer access checks while parsing the declarator; we cannot know
11172     what names are accessible until we know what is being
11173     declared.  */
11174  resume_deferring_access_checks ();
11175
11176  /* Parse the declarator.  */
11177  declarator
11178    = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
11179			    &ctor_dtor_or_conv_p,
11180			    /*parenthesized_p=*/NULL,
11181			    /*member_p=*/false);
11182  /* Gather up the deferred checks.  */
11183  stop_deferring_access_checks ();
11184
11185  /* If the DECLARATOR was erroneous, there's no need to go
11186     further.  */
11187  if (declarator == cp_error_declarator)
11188    return error_mark_node;
11189
11190  /* Check that the number of template-parameter-lists is OK.  */
11191  if (!cp_parser_check_declarator_template_parameters (parser, declarator))
11192    return error_mark_node;
11193
11194  if (declares_class_or_enum & 2)
11195    cp_parser_check_for_definition_in_return_type (declarator,
11196						   decl_specifiers->type);
11197
11198  /* Figure out what scope the entity declared by the DECLARATOR is
11199     located in.  `grokdeclarator' sometimes changes the scope, so
11200     we compute it now.  */
11201  scope = get_scope_of_declarator (declarator);
11202
11203  /* If we're allowing GNU extensions, look for an asm-specification
11204     and attributes.  */
11205  if (cp_parser_allow_gnu_extensions_p (parser))
11206    {
11207      /* Look for an asm-specification.  */
11208      asm_specification = cp_parser_asm_specification_opt (parser);
11209      /* And attributes.  */
11210      attributes = cp_parser_attributes_opt (parser);
11211    }
11212  else
11213    {
11214      asm_specification = NULL_TREE;
11215      attributes = NULL_TREE;
11216    }
11217
11218  /* Peek at the next token.  */
11219  token = cp_lexer_peek_token (parser->lexer);
11220  /* Check to see if the token indicates the start of a
11221     function-definition.  */
11222  if (cp_parser_token_starts_function_definition_p (token))
11223    {
11224      if (!function_definition_allowed_p)
11225	{
11226	  /* If a function-definition should not appear here, issue an
11227	     error message.  */
11228	  cp_parser_error (parser,
11229			   "a function-definition is not allowed here");
11230	  return error_mark_node;
11231	}
11232      else
11233	{
11234	  /* Neither attributes nor an asm-specification are allowed
11235	     on a function-definition.  */
11236	  if (asm_specification)
11237	    error ("an asm-specification is not allowed on a function-definition");
11238	  if (attributes)
11239	    error ("attributes are not allowed on a function-definition");
11240	  /* This is a function-definition.  */
11241	  *function_definition_p = true;
11242
11243	  /* Parse the function definition.  */
11244	  if (member_p)
11245	    decl = cp_parser_save_member_function_body (parser,
11246							decl_specifiers,
11247							declarator,
11248							prefix_attributes);
11249	  else
11250	    decl
11251	      = (cp_parser_function_definition_from_specifiers_and_declarator
11252		 (parser, decl_specifiers, prefix_attributes, declarator));
11253
11254	  return decl;
11255	}
11256    }
11257
11258  /* [dcl.dcl]
11259
11260     Only in function declarations for constructors, destructors, and
11261     type conversions can the decl-specifier-seq be omitted.
11262
11263     We explicitly postpone this check past the point where we handle
11264     function-definitions because we tolerate function-definitions
11265     that are missing their return types in some modes.  */
11266  if (!decl_specifiers->any_specifiers_p && ctor_dtor_or_conv_p <= 0)
11267    {
11268      cp_parser_error (parser,
11269		       "expected constructor, destructor, or type conversion");
11270      return error_mark_node;
11271    }
11272
11273  /* An `=' or an `(' indicates an initializer.  */
11274  if (token->type == CPP_EQ
11275      || token->type == CPP_OPEN_PAREN)
11276    {
11277      is_initialized = true;
11278      initialization_kind = token->type;
11279    }
11280  else
11281    {
11282      /* If the init-declarator isn't initialized and isn't followed by a
11283	 `,' or `;', it's not a valid init-declarator.  */
11284      if (token->type != CPP_COMMA
11285	  && token->type != CPP_SEMICOLON)
11286	{
11287	  cp_parser_error (parser, "expected initializer");
11288	  return error_mark_node;
11289	}
11290      is_initialized = false;
11291      initialization_kind = CPP_EOF;
11292    }
11293
11294  /* Because start_decl has side-effects, we should only call it if we
11295     know we're going ahead.  By this point, we know that we cannot
11296     possibly be looking at any other construct.  */
11297  cp_parser_commit_to_tentative_parse (parser);
11298
11299  /* If the decl specifiers were bad, issue an error now that we're
11300     sure this was intended to be a declarator.  Then continue
11301     declaring the variable(s), as int, to try to cut down on further
11302     errors.  */
11303  if (decl_specifiers->any_specifiers_p
11304      && decl_specifiers->type == error_mark_node)
11305    {
11306      cp_parser_error (parser, "invalid type in declaration");
11307      decl_specifiers->type = integer_type_node;
11308    }
11309
11310  /* Check to see whether or not this declaration is a friend.  */
11311  friend_p = cp_parser_friend_p (decl_specifiers);
11312
11313  /* Enter the newly declared entry in the symbol table.  If we're
11314     processing a declaration in a class-specifier, we wait until
11315     after processing the initializer.  */
11316  if (!member_p)
11317    {
11318      if (parser->in_unbraced_linkage_specification_p)
11319	decl_specifiers->storage_class = sc_extern;
11320      decl = start_decl (declarator, decl_specifiers,
11321			 is_initialized, attributes, prefix_attributes,
11322			 &pushed_scope);
11323    }
11324  else if (scope)
11325    /* Enter the SCOPE.  That way unqualified names appearing in the
11326       initializer will be looked up in SCOPE.  */
11327    pushed_scope = push_scope (scope);
11328
11329  /* Perform deferred access control checks, now that we know in which
11330     SCOPE the declared entity resides.  */
11331  if (!member_p && decl)
11332    {
11333      tree saved_current_function_decl = NULL_TREE;
11334
11335      /* If the entity being declared is a function, pretend that we
11336	 are in its scope.  If it is a `friend', it may have access to
11337	 things that would not otherwise be accessible.  */
11338      if (TREE_CODE (decl) == FUNCTION_DECL)
11339	{
11340	  saved_current_function_decl = current_function_decl;
11341	  current_function_decl = decl;
11342	}
11343
11344      /* Perform access checks for template parameters.  */
11345      cp_parser_perform_template_parameter_access_checks (checks);
11346
11347      /* Perform the access control checks for the declarator and the
11348	 the decl-specifiers.  */
11349      perform_deferred_access_checks ();
11350
11351      /* Restore the saved value.  */
11352      if (TREE_CODE (decl) == FUNCTION_DECL)
11353	current_function_decl = saved_current_function_decl;
11354    }
11355
11356  /* Parse the initializer.  */
11357  initializer = NULL_TREE;
11358  is_parenthesized_init = false;
11359  is_non_constant_init = true;
11360  if (is_initialized)
11361    {
11362      if (function_declarator_p (declarator))
11363	{
11364	   if (initialization_kind == CPP_EQ)
11365	     initializer = cp_parser_pure_specifier (parser);
11366	   else
11367	     {
11368	       /* If the declaration was erroneous, we don't really
11369		  know what the user intended, so just silently
11370		  consume the initializer.  */
11371	       if (decl != error_mark_node)
11372		 error ("initializer provided for function");
11373	       cp_parser_skip_to_closing_parenthesis (parser,
11374						      /*recovering=*/true,
11375						      /*or_comma=*/false,
11376						      /*consume_paren=*/true);
11377	     }
11378	}
11379      else
11380	initializer = cp_parser_initializer (parser,
11381					     &is_parenthesized_init,
11382					     &is_non_constant_init);
11383    }
11384
11385  /* The old parser allows attributes to appear after a parenthesized
11386     initializer.  Mark Mitchell proposed removing this functionality
11387     on the GCC mailing lists on 2002-08-13.  This parser accepts the
11388     attributes -- but ignores them.  */
11389  if (cp_parser_allow_gnu_extensions_p (parser) && is_parenthesized_init)
11390    if (cp_parser_attributes_opt (parser))
11391      warning (OPT_Wattributes,
11392	       "attributes after parenthesized initializer ignored");
11393
11394  /* For an in-class declaration, use `grokfield' to create the
11395     declaration.  */
11396  if (member_p)
11397    {
11398      if (pushed_scope)
11399	{
11400	  pop_scope (pushed_scope);
11401	  pushed_scope = false;
11402	}
11403      decl = grokfield (declarator, decl_specifiers,
11404			initializer, !is_non_constant_init,
11405			/*asmspec=*/NULL_TREE,
11406			prefix_attributes);
11407      if (decl && TREE_CODE (decl) == FUNCTION_DECL)
11408	cp_parser_save_default_args (parser, decl);
11409    }
11410
11411  /* Finish processing the declaration.  But, skip friend
11412     declarations.  */
11413  if (!friend_p && decl && decl != error_mark_node)
11414    {
11415      cp_finish_decl (decl,
11416		      initializer, !is_non_constant_init,
11417		      asm_specification,
11418		      /* If the initializer is in parentheses, then this is
11419			 a direct-initialization, which means that an
11420			 `explicit' constructor is OK.  Otherwise, an
11421			 `explicit' constructor cannot be used.  */
11422		      ((is_parenthesized_init || !is_initialized)
11423		     ? 0 : LOOKUP_ONLYCONVERTING));
11424    }
11425  if (!friend_p && pushed_scope)
11426    pop_scope (pushed_scope);
11427
11428  return decl;
11429}
11430
11431/* Parse a declarator.
11432
11433   declarator:
11434     direct-declarator
11435     ptr-operator declarator
11436
11437   abstract-declarator:
11438     ptr-operator abstract-declarator [opt]
11439     direct-abstract-declarator
11440
11441   GNU Extensions:
11442
11443   declarator:
11444     attributes [opt] direct-declarator
11445     attributes [opt] ptr-operator declarator
11446
11447   abstract-declarator:
11448     attributes [opt] ptr-operator abstract-declarator [opt]
11449     attributes [opt] direct-abstract-declarator
11450
11451   If CTOR_DTOR_OR_CONV_P is not NULL, *CTOR_DTOR_OR_CONV_P is used to
11452   detect constructor, destructor or conversion operators. It is set
11453   to -1 if the declarator is a name, and +1 if it is a
11454   function. Otherwise it is set to zero. Usually you just want to
11455   test for >0, but internally the negative value is used.
11456
11457   (The reason for CTOR_DTOR_OR_CONV_P is that a declaration must have
11458   a decl-specifier-seq unless it declares a constructor, destructor,
11459   or conversion.  It might seem that we could check this condition in
11460   semantic analysis, rather than parsing, but that makes it difficult
11461   to handle something like `f()'.  We want to notice that there are
11462   no decl-specifiers, and therefore realize that this is an
11463   expression, not a declaration.)
11464
11465   If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to true iff
11466   the declarator is a direct-declarator of the form "(...)".
11467
11468   MEMBER_P is true iff this declarator is a member-declarator.  */
11469
11470static cp_declarator *
11471cp_parser_declarator (cp_parser* parser,
11472		      cp_parser_declarator_kind dcl_kind,
11473		      int* ctor_dtor_or_conv_p,
11474		      bool* parenthesized_p,
11475		      bool member_p)
11476{
11477  cp_token *token;
11478  cp_declarator *declarator;
11479  enum tree_code code;
11480  cp_cv_quals cv_quals;
11481  tree class_type;
11482  tree attributes = NULL_TREE;
11483
11484  /* Assume this is not a constructor, destructor, or type-conversion
11485     operator.  */
11486  if (ctor_dtor_or_conv_p)
11487    *ctor_dtor_or_conv_p = 0;
11488
11489  if (cp_parser_allow_gnu_extensions_p (parser))
11490    attributes = cp_parser_attributes_opt (parser);
11491
11492  /* Peek at the next token.  */
11493  token = cp_lexer_peek_token (parser->lexer);
11494
11495  /* Check for the ptr-operator production.  */
11496  cp_parser_parse_tentatively (parser);
11497  /* Parse the ptr-operator.  */
11498  code = cp_parser_ptr_operator (parser,
11499				 &class_type,
11500				 &cv_quals);
11501  /* If that worked, then we have a ptr-operator.  */
11502  if (cp_parser_parse_definitely (parser))
11503    {
11504      /* If a ptr-operator was found, then this declarator was not
11505	 parenthesized.  */
11506      if (parenthesized_p)
11507	*parenthesized_p = true;
11508      /* The dependent declarator is optional if we are parsing an
11509	 abstract-declarator.  */
11510      if (dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11511	cp_parser_parse_tentatively (parser);
11512
11513      /* Parse the dependent declarator.  */
11514      declarator = cp_parser_declarator (parser, dcl_kind,
11515					 /*ctor_dtor_or_conv_p=*/NULL,
11516					 /*parenthesized_p=*/NULL,
11517					 /*member_p=*/false);
11518
11519      /* If we are parsing an abstract-declarator, we must handle the
11520	 case where the dependent declarator is absent.  */
11521      if (dcl_kind != CP_PARSER_DECLARATOR_NAMED
11522	  && !cp_parser_parse_definitely (parser))
11523	declarator = NULL;
11524
11525      /* Build the representation of the ptr-operator.  */
11526      if (class_type)
11527	declarator = make_ptrmem_declarator (cv_quals,
11528					     class_type,
11529					     declarator);
11530      else if (code == INDIRECT_REF)
11531	declarator = make_pointer_declarator (cv_quals, declarator);
11532      else
11533	declarator = make_reference_declarator (cv_quals, declarator);
11534    }
11535  /* Everything else is a direct-declarator.  */
11536  else
11537    {
11538      if (parenthesized_p)
11539	*parenthesized_p = cp_lexer_next_token_is (parser->lexer,
11540						   CPP_OPEN_PAREN);
11541      declarator = cp_parser_direct_declarator (parser, dcl_kind,
11542						ctor_dtor_or_conv_p,
11543						member_p);
11544    }
11545
11546  if (attributes && declarator && declarator != cp_error_declarator)
11547    declarator->attributes = attributes;
11548
11549  return declarator;
11550}
11551
11552/* Parse a direct-declarator or direct-abstract-declarator.
11553
11554   direct-declarator:
11555     declarator-id
11556     direct-declarator ( parameter-declaration-clause )
11557       cv-qualifier-seq [opt]
11558       exception-specification [opt]
11559     direct-declarator [ constant-expression [opt] ]
11560     ( declarator )
11561
11562   direct-abstract-declarator:
11563     direct-abstract-declarator [opt]
11564       ( parameter-declaration-clause )
11565       cv-qualifier-seq [opt]
11566       exception-specification [opt]
11567     direct-abstract-declarator [opt] [ constant-expression [opt] ]
11568     ( abstract-declarator )
11569
11570   Returns a representation of the declarator.  DCL_KIND is
11571   CP_PARSER_DECLARATOR_ABSTRACT, if we are parsing a
11572   direct-abstract-declarator.  It is CP_PARSER_DECLARATOR_NAMED, if
11573   we are parsing a direct-declarator.  It is
11574   CP_PARSER_DECLARATOR_EITHER, if we can accept either - in the case
11575   of ambiguity we prefer an abstract declarator, as per
11576   [dcl.ambig.res].  CTOR_DTOR_OR_CONV_P and MEMBER_P are as for
11577   cp_parser_declarator.  */
11578
11579static cp_declarator *
11580cp_parser_direct_declarator (cp_parser* parser,
11581			     cp_parser_declarator_kind dcl_kind,
11582			     int* ctor_dtor_or_conv_p,
11583			     bool member_p)
11584{
11585  cp_token *token;
11586  cp_declarator *declarator = NULL;
11587  tree scope = NULL_TREE;
11588  bool saved_default_arg_ok_p = parser->default_arg_ok_p;
11589  bool saved_in_declarator_p = parser->in_declarator_p;
11590  bool first = true;
11591  tree pushed_scope = NULL_TREE;
11592
11593  while (true)
11594    {
11595      /* Peek at the next token.  */
11596      token = cp_lexer_peek_token (parser->lexer);
11597      if (token->type == CPP_OPEN_PAREN)
11598	{
11599	  /* This is either a parameter-declaration-clause, or a
11600	     parenthesized declarator. When we know we are parsing a
11601	     named declarator, it must be a parenthesized declarator
11602	     if FIRST is true. For instance, `(int)' is a
11603	     parameter-declaration-clause, with an omitted
11604	     direct-abstract-declarator. But `((*))', is a
11605	     parenthesized abstract declarator. Finally, when T is a
11606	     template parameter `(T)' is a
11607	     parameter-declaration-clause, and not a parenthesized
11608	     named declarator.
11609
11610	     We first try and parse a parameter-declaration-clause,
11611	     and then try a nested declarator (if FIRST is true).
11612
11613	     It is not an error for it not to be a
11614	     parameter-declaration-clause, even when FIRST is
11615	     false. Consider,
11616
11617	       int i (int);
11618	       int i (3);
11619
11620	     The first is the declaration of a function while the
11621	     second is a the definition of a variable, including its
11622	     initializer.
11623
11624	     Having seen only the parenthesis, we cannot know which of
11625	     these two alternatives should be selected.  Even more
11626	     complex are examples like:
11627
11628	       int i (int (a));
11629	       int i (int (3));
11630
11631	     The former is a function-declaration; the latter is a
11632	     variable initialization.
11633
11634	     Thus again, we try a parameter-declaration-clause, and if
11635	     that fails, we back out and return.  */
11636
11637	  if (!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11638	    {
11639	      cp_parameter_declarator *params;
11640	      unsigned saved_num_template_parameter_lists;
11641
11642	      /* In a member-declarator, the only valid interpretation
11643		 of a parenthesis is the start of a
11644		 parameter-declaration-clause.  (It is invalid to
11645		 initialize a static data member with a parenthesized
11646		 initializer; only the "=" form of initialization is
11647		 permitted.)  */
11648	      if (!member_p)
11649		cp_parser_parse_tentatively (parser);
11650
11651	      /* Consume the `('.  */
11652	      cp_lexer_consume_token (parser->lexer);
11653	      if (first)
11654		{
11655		  /* If this is going to be an abstract declarator, we're
11656		     in a declarator and we can't have default args.  */
11657		  parser->default_arg_ok_p = false;
11658		  parser->in_declarator_p = true;
11659		}
11660
11661	      /* Inside the function parameter list, surrounding
11662		 template-parameter-lists do not apply.  */
11663	      saved_num_template_parameter_lists
11664		= parser->num_template_parameter_lists;
11665	      parser->num_template_parameter_lists = 0;
11666
11667	      /* Parse the parameter-declaration-clause.  */
11668	      params = cp_parser_parameter_declaration_clause (parser);
11669
11670	      parser->num_template_parameter_lists
11671		= saved_num_template_parameter_lists;
11672
11673	      /* If all went well, parse the cv-qualifier-seq and the
11674		 exception-specification.  */
11675	      if (member_p || cp_parser_parse_definitely (parser))
11676		{
11677		  cp_cv_quals cv_quals;
11678		  tree exception_specification;
11679
11680		  if (ctor_dtor_or_conv_p)
11681		    *ctor_dtor_or_conv_p = *ctor_dtor_or_conv_p < 0;
11682		  first = false;
11683		  /* Consume the `)'.  */
11684		  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
11685
11686		  /* Parse the cv-qualifier-seq.  */
11687		  cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
11688		  /* And the exception-specification.  */
11689		  exception_specification
11690		    = cp_parser_exception_specification_opt (parser);
11691
11692		  /* Create the function-declarator.  */
11693		  declarator = make_call_declarator (declarator,
11694						     params,
11695						     cv_quals,
11696						     exception_specification);
11697		  /* Any subsequent parameter lists are to do with
11698		     return type, so are not those of the declared
11699		     function.  */
11700		  parser->default_arg_ok_p = false;
11701
11702		  /* Repeat the main loop.  */
11703		  continue;
11704		}
11705	    }
11706
11707	  /* If this is the first, we can try a parenthesized
11708	     declarator.  */
11709	  if (first)
11710	    {
11711	      bool saved_in_type_id_in_expr_p;
11712
11713	      parser->default_arg_ok_p = saved_default_arg_ok_p;
11714	      parser->in_declarator_p = saved_in_declarator_p;
11715
11716	      /* Consume the `('.  */
11717	      cp_lexer_consume_token (parser->lexer);
11718	      /* Parse the nested declarator.  */
11719	      saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
11720	      parser->in_type_id_in_expr_p = true;
11721	      declarator
11722		= cp_parser_declarator (parser, dcl_kind, ctor_dtor_or_conv_p,
11723					/*parenthesized_p=*/NULL,
11724					member_p);
11725	      parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
11726	      first = false;
11727	      /* Expect a `)'.  */
11728	      if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
11729		declarator = cp_error_declarator;
11730	      if (declarator == cp_error_declarator)
11731		break;
11732
11733	      goto handle_declarator;
11734	    }
11735	  /* Otherwise, we must be done.  */
11736	  else
11737	    break;
11738	}
11739      else if ((!first || dcl_kind != CP_PARSER_DECLARATOR_NAMED)
11740	       && token->type == CPP_OPEN_SQUARE)
11741	{
11742	  /* Parse an array-declarator.  */
11743	  tree bounds;
11744
11745	  if (ctor_dtor_or_conv_p)
11746	    *ctor_dtor_or_conv_p = 0;
11747
11748	  first = false;
11749	  parser->default_arg_ok_p = false;
11750	  parser->in_declarator_p = true;
11751	  /* Consume the `['.  */
11752	  cp_lexer_consume_token (parser->lexer);
11753	  /* Peek at the next token.  */
11754	  token = cp_lexer_peek_token (parser->lexer);
11755	  /* If the next token is `]', then there is no
11756	     constant-expression.  */
11757	  if (token->type != CPP_CLOSE_SQUARE)
11758	    {
11759	      bool non_constant_p;
11760
11761	      bounds
11762		= cp_parser_constant_expression (parser,
11763						 /*allow_non_constant=*/true,
11764						 &non_constant_p);
11765	      if (!non_constant_p)
11766		bounds = fold_non_dependent_expr (bounds);
11767	      /* Normally, the array bound must be an integral constant
11768		 expression.  However, as an extension, we allow VLAs
11769		 in function scopes.  */
11770	      else if (!parser->in_function_body)
11771		{
11772		  error ("array bound is not an integer constant");
11773		  bounds = error_mark_node;
11774		}
11775	    }
11776	  else
11777	    bounds = NULL_TREE;
11778	  /* Look for the closing `]'.  */
11779	  if (!cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'"))
11780	    {
11781	      declarator = cp_error_declarator;
11782	      break;
11783	    }
11784
11785	  declarator = make_array_declarator (declarator, bounds);
11786	}
11787      else if (first && dcl_kind != CP_PARSER_DECLARATOR_ABSTRACT)
11788	{
11789	  tree qualifying_scope;
11790	  tree unqualified_name;
11791	  special_function_kind sfk;
11792	  bool abstract_ok;
11793
11794	  /* Parse a declarator-id */
11795	  abstract_ok = (dcl_kind == CP_PARSER_DECLARATOR_EITHER);
11796	  if (abstract_ok)
11797	    cp_parser_parse_tentatively (parser);
11798	  unqualified_name
11799	    = cp_parser_declarator_id (parser, /*optional_p=*/abstract_ok);
11800	  qualifying_scope = parser->scope;
11801	  if (abstract_ok)
11802	    {
11803	      if (!cp_parser_parse_definitely (parser))
11804		unqualified_name = error_mark_node;
11805	      else if (unqualified_name
11806		       && (qualifying_scope
11807			   || (TREE_CODE (unqualified_name)
11808			       != IDENTIFIER_NODE)))
11809		{
11810		  cp_parser_error (parser, "expected unqualified-id");
11811		  unqualified_name = error_mark_node;
11812		}
11813	    }
11814
11815	  if (!unqualified_name)
11816	    return NULL;
11817	  if (unqualified_name == error_mark_node)
11818	    {
11819	      declarator = cp_error_declarator;
11820	      break;
11821	    }
11822
11823	  if (qualifying_scope && at_namespace_scope_p ()
11824	      && TREE_CODE (qualifying_scope) == TYPENAME_TYPE)
11825	    {
11826	      /* In the declaration of a member of a template class
11827		 outside of the class itself, the SCOPE will sometimes
11828		 be a TYPENAME_TYPE.  For example, given:
11829
11830		 template <typename T>
11831		 int S<T>::R::i = 3;
11832
11833		 the SCOPE will be a TYPENAME_TYPE for `S<T>::R'.  In
11834		 this context, we must resolve S<T>::R to an ordinary
11835		 type, rather than a typename type.
11836
11837		 The reason we normally avoid resolving TYPENAME_TYPEs
11838		 is that a specialization of `S' might render
11839		 `S<T>::R' not a type.  However, if `S' is
11840		 specialized, then this `i' will not be used, so there
11841		 is no harm in resolving the types here.  */
11842	      tree type;
11843
11844	      /* Resolve the TYPENAME_TYPE.  */
11845	      type = resolve_typename_type (qualifying_scope,
11846					    /*only_current_p=*/false);
11847	      /* If that failed, the declarator is invalid.  */
11848	      if (type == error_mark_node)
11849		error ("%<%T::%D%> is not a type",
11850		       TYPE_CONTEXT (qualifying_scope),
11851		       TYPE_IDENTIFIER (qualifying_scope));
11852	      qualifying_scope = type;
11853	    }
11854
11855	  sfk = sfk_none;
11856	  if (unqualified_name)
11857	    {
11858	      tree class_type;
11859
11860	      if (qualifying_scope
11861		  && CLASS_TYPE_P (qualifying_scope))
11862		class_type = qualifying_scope;
11863	      else
11864		class_type = current_class_type;
11865
11866	      if (TREE_CODE (unqualified_name) == TYPE_DECL)
11867		{
11868		  tree name_type = TREE_TYPE (unqualified_name);
11869		  if (class_type && same_type_p (name_type, class_type))
11870		    {
11871		      if (qualifying_scope
11872			  && CLASSTYPE_USE_TEMPLATE (name_type))
11873			{
11874			  error ("invalid use of constructor as a template");
11875			  inform ("use %<%T::%D%> instead of %<%T::%D%> to "
11876				  "name the constructor in a qualified name",
11877				  class_type,
11878				  DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
11879				  class_type, name_type);
11880			  declarator = cp_error_declarator;
11881			  break;
11882			}
11883		      else
11884			unqualified_name = constructor_name (class_type);
11885		    }
11886		  else
11887		    {
11888		      /* We do not attempt to print the declarator
11889			 here because we do not have enough
11890			 information about its original syntactic
11891			 form.  */
11892		      cp_parser_error (parser, "invalid declarator");
11893		      declarator = cp_error_declarator;
11894		      break;
11895		    }
11896		}
11897
11898	      if (class_type)
11899		{
11900		  if (TREE_CODE (unqualified_name) == BIT_NOT_EXPR)
11901		    sfk = sfk_destructor;
11902		  else if (IDENTIFIER_TYPENAME_P (unqualified_name))
11903		    sfk = sfk_conversion;
11904		  else if (/* There's no way to declare a constructor
11905			      for an anonymous type, even if the type
11906			      got a name for linkage purposes.  */
11907			   !TYPE_WAS_ANONYMOUS (class_type)
11908			   && constructor_name_p (unqualified_name,
11909						  class_type))
11910		    {
11911		      unqualified_name = constructor_name (class_type);
11912		      sfk = sfk_constructor;
11913		    }
11914
11915		  if (ctor_dtor_or_conv_p && sfk != sfk_none)
11916		    *ctor_dtor_or_conv_p = -1;
11917		}
11918	    }
11919	  declarator = make_id_declarator (qualifying_scope,
11920					   unqualified_name,
11921					   sfk);
11922	  declarator->id_loc = token->location;
11923
11924	handle_declarator:;
11925	  scope = get_scope_of_declarator (declarator);
11926	  if (scope)
11927	    /* Any names that appear after the declarator-id for a
11928	       member are looked up in the containing scope.  */
11929	    pushed_scope = push_scope (scope);
11930	  parser->in_declarator_p = true;
11931	  if ((ctor_dtor_or_conv_p && *ctor_dtor_or_conv_p)
11932	      || (declarator && declarator->kind == cdk_id))
11933	    /* Default args are only allowed on function
11934	       declarations.  */
11935	    parser->default_arg_ok_p = saved_default_arg_ok_p;
11936	  else
11937	    parser->default_arg_ok_p = false;
11938
11939	  first = false;
11940	}
11941      /* We're done.  */
11942      else
11943	break;
11944    }
11945
11946  /* For an abstract declarator, we might wind up with nothing at this
11947     point.  That's an error; the declarator is not optional.  */
11948  if (!declarator)
11949    cp_parser_error (parser, "expected declarator");
11950
11951  /* If we entered a scope, we must exit it now.  */
11952  if (pushed_scope)
11953    pop_scope (pushed_scope);
11954
11955  parser->default_arg_ok_p = saved_default_arg_ok_p;
11956  parser->in_declarator_p = saved_in_declarator_p;
11957
11958  return declarator;
11959}
11960
11961/* Parse a ptr-operator.
11962
11963   ptr-operator:
11964     * cv-qualifier-seq [opt]
11965     &
11966     :: [opt] nested-name-specifier * cv-qualifier-seq [opt]
11967
11968   GNU Extension:
11969
11970   ptr-operator:
11971     & cv-qualifier-seq [opt]
11972
11973   Returns INDIRECT_REF if a pointer, or pointer-to-member, was used.
11974   Returns ADDR_EXPR if a reference was used.  In the case of a
11975   pointer-to-member, *TYPE is filled in with the TYPE containing the
11976   member.  *CV_QUALS is filled in with the cv-qualifier-seq, or
11977   TYPE_UNQUALIFIED, if there are no cv-qualifiers.  Returns
11978   ERROR_MARK if an error occurred.  */
11979
11980static enum tree_code
11981cp_parser_ptr_operator (cp_parser* parser,
11982			tree* type,
11983			cp_cv_quals *cv_quals)
11984{
11985  enum tree_code code = ERROR_MARK;
11986  cp_token *token;
11987
11988  /* Assume that it's not a pointer-to-member.  */
11989  *type = NULL_TREE;
11990  /* And that there are no cv-qualifiers.  */
11991  *cv_quals = TYPE_UNQUALIFIED;
11992
11993  /* Peek at the next token.  */
11994  token = cp_lexer_peek_token (parser->lexer);
11995  /* If it's a `*' or `&' we have a pointer or reference.  */
11996  if (token->type == CPP_MULT || token->type == CPP_AND)
11997    {
11998      /* Remember which ptr-operator we were processing.  */
11999      code = (token->type == CPP_AND ? ADDR_EXPR : INDIRECT_REF);
12000
12001      /* Consume the `*' or `&'.  */
12002      cp_lexer_consume_token (parser->lexer);
12003
12004      /* A `*' can be followed by a cv-qualifier-seq, and so can a
12005	 `&', if we are allowing GNU extensions.  (The only qualifier
12006	 that can legally appear after `&' is `restrict', but that is
12007	 enforced during semantic analysis.  */
12008      if (code == INDIRECT_REF
12009	  || cp_parser_allow_gnu_extensions_p (parser))
12010	*cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12011    }
12012  else
12013    {
12014      /* Try the pointer-to-member case.  */
12015      cp_parser_parse_tentatively (parser);
12016      /* Look for the optional `::' operator.  */
12017      cp_parser_global_scope_opt (parser,
12018				  /*current_scope_valid_p=*/false);
12019      /* Look for the nested-name specifier.  */
12020      cp_parser_nested_name_specifier (parser,
12021				       /*typename_keyword_p=*/false,
12022				       /*check_dependency_p=*/true,
12023				       /*type_p=*/false,
12024				       /*is_declaration=*/false);
12025      /* If we found it, and the next token is a `*', then we are
12026	 indeed looking at a pointer-to-member operator.  */
12027      if (!cp_parser_error_occurred (parser)
12028	  && cp_parser_require (parser, CPP_MULT, "`*'"))
12029	{
12030	  /* Indicate that the `*' operator was used.  */
12031	  code = INDIRECT_REF;
12032
12033	  if (TREE_CODE (parser->scope) == NAMESPACE_DECL)
12034	    error ("%qD is a namespace", parser->scope);
12035	  else
12036	    {
12037	      /* The type of which the member is a member is given by the
12038		 current SCOPE.  */
12039	      *type = parser->scope;
12040	      /* The next name will not be qualified.  */
12041	      parser->scope = NULL_TREE;
12042	      parser->qualifying_scope = NULL_TREE;
12043	      parser->object_scope = NULL_TREE;
12044	      /* Look for the optional cv-qualifier-seq.  */
12045	      *cv_quals = cp_parser_cv_qualifier_seq_opt (parser);
12046	    }
12047	}
12048      /* If that didn't work we don't have a ptr-operator.  */
12049      if (!cp_parser_parse_definitely (parser))
12050	cp_parser_error (parser, "expected ptr-operator");
12051    }
12052
12053  return code;
12054}
12055
12056/* Parse an (optional) cv-qualifier-seq.
12057
12058   cv-qualifier-seq:
12059     cv-qualifier cv-qualifier-seq [opt]
12060
12061   cv-qualifier:
12062     const
12063     volatile
12064
12065   GNU Extension:
12066
12067   cv-qualifier:
12068     __restrict__
12069
12070   Returns a bitmask representing the cv-qualifiers.  */
12071
12072static cp_cv_quals
12073cp_parser_cv_qualifier_seq_opt (cp_parser* parser)
12074{
12075  cp_cv_quals cv_quals = TYPE_UNQUALIFIED;
12076
12077  while (true)
12078    {
12079      cp_token *token;
12080      cp_cv_quals cv_qualifier;
12081
12082      /* Peek at the next token.  */
12083      token = cp_lexer_peek_token (parser->lexer);
12084      /* See if it's a cv-qualifier.  */
12085      switch (token->keyword)
12086	{
12087	case RID_CONST:
12088	  cv_qualifier = TYPE_QUAL_CONST;
12089	  break;
12090
12091	case RID_VOLATILE:
12092	  cv_qualifier = TYPE_QUAL_VOLATILE;
12093	  break;
12094
12095	case RID_RESTRICT:
12096	  cv_qualifier = TYPE_QUAL_RESTRICT;
12097	  break;
12098
12099	default:
12100	  cv_qualifier = TYPE_UNQUALIFIED;
12101	  break;
12102	}
12103
12104      if (!cv_qualifier)
12105	break;
12106
12107      if (cv_quals & cv_qualifier)
12108	{
12109	  error ("duplicate cv-qualifier");
12110	  cp_lexer_purge_token (parser->lexer);
12111	}
12112      else
12113	{
12114	  cp_lexer_consume_token (parser->lexer);
12115	  cv_quals |= cv_qualifier;
12116	}
12117    }
12118
12119  return cv_quals;
12120}
12121
12122/* Parse a declarator-id.
12123
12124   declarator-id:
12125     id-expression
12126     :: [opt] nested-name-specifier [opt] type-name
12127
12128   In the `id-expression' case, the value returned is as for
12129   cp_parser_id_expression if the id-expression was an unqualified-id.
12130   If the id-expression was a qualified-id, then a SCOPE_REF is
12131   returned.  The first operand is the scope (either a NAMESPACE_DECL
12132   or TREE_TYPE), but the second is still just a representation of an
12133   unqualified-id.  */
12134
12135static tree
12136cp_parser_declarator_id (cp_parser* parser, bool optional_p)
12137{
12138  tree id;
12139  /* The expression must be an id-expression.  Assume that qualified
12140     names are the names of types so that:
12141
12142       template <class T>
12143       int S<T>::R::i = 3;
12144
12145     will work; we must treat `S<T>::R' as the name of a type.
12146     Similarly, assume that qualified names are templates, where
12147     required, so that:
12148
12149       template <class T>
12150       int S<T>::R<T>::i = 3;
12151
12152     will work, too.  */
12153  id = cp_parser_id_expression (parser,
12154				/*template_keyword_p=*/false,
12155				/*check_dependency_p=*/false,
12156				/*template_p=*/NULL,
12157				/*declarator_p=*/true,
12158				optional_p);
12159  if (id && BASELINK_P (id))
12160    id = BASELINK_FUNCTIONS (id);
12161  return id;
12162}
12163
12164/* Parse a type-id.
12165
12166   type-id:
12167     type-specifier-seq abstract-declarator [opt]
12168
12169   Returns the TYPE specified.  */
12170
12171static tree
12172cp_parser_type_id (cp_parser* parser)
12173{
12174  cp_decl_specifier_seq type_specifier_seq;
12175  cp_declarator *abstract_declarator;
12176
12177  /* Parse the type-specifier-seq.  */
12178  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
12179				&type_specifier_seq);
12180  if (type_specifier_seq.type == error_mark_node)
12181    return error_mark_node;
12182
12183  /* There might or might not be an abstract declarator.  */
12184  cp_parser_parse_tentatively (parser);
12185  /* Look for the declarator.  */
12186  abstract_declarator
12187    = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_ABSTRACT, NULL,
12188			    /*parenthesized_p=*/NULL,
12189			    /*member_p=*/false);
12190  /* Check to see if there really was a declarator.  */
12191  if (!cp_parser_parse_definitely (parser))
12192    abstract_declarator = NULL;
12193
12194  return groktypename (&type_specifier_seq, abstract_declarator);
12195}
12196
12197/* Parse a type-specifier-seq.
12198
12199   type-specifier-seq:
12200     type-specifier type-specifier-seq [opt]
12201
12202   GNU extension:
12203
12204   type-specifier-seq:
12205     attributes type-specifier-seq [opt]
12206
12207   If IS_CONDITION is true, we are at the start of a "condition",
12208   e.g., we've just seen "if (".
12209
12210   Sets *TYPE_SPECIFIER_SEQ to represent the sequence.  */
12211
12212static void
12213cp_parser_type_specifier_seq (cp_parser* parser,
12214			      bool is_condition,
12215			      cp_decl_specifier_seq *type_specifier_seq)
12216{
12217  bool seen_type_specifier = false;
12218  cp_parser_flags flags = CP_PARSER_FLAGS_OPTIONAL;
12219
12220  /* Clear the TYPE_SPECIFIER_SEQ.  */
12221  clear_decl_specs (type_specifier_seq);
12222
12223  /* Parse the type-specifiers and attributes.  */
12224  while (true)
12225    {
12226      tree type_specifier;
12227      bool is_cv_qualifier;
12228
12229      /* Check for attributes first.  */
12230      if (cp_lexer_next_token_is_keyword (parser->lexer, RID_ATTRIBUTE))
12231	{
12232	  type_specifier_seq->attributes =
12233	    chainon (type_specifier_seq->attributes,
12234		     cp_parser_attributes_opt (parser));
12235	  continue;
12236	}
12237
12238      /* Look for the type-specifier.  */
12239      type_specifier = cp_parser_type_specifier (parser,
12240						 flags,
12241						 type_specifier_seq,
12242						 /*is_declaration=*/false,
12243						 NULL,
12244						 &is_cv_qualifier);
12245      if (!type_specifier)
12246	{
12247	  /* If the first type-specifier could not be found, this is not a
12248	     type-specifier-seq at all.  */
12249	  if (!seen_type_specifier)
12250	    {
12251	      cp_parser_error (parser, "expected type-specifier");
12252	      type_specifier_seq->type = error_mark_node;
12253	      return;
12254	    }
12255	  /* If subsequent type-specifiers could not be found, the
12256	     type-specifier-seq is complete.  */
12257	  break;
12258	}
12259
12260      seen_type_specifier = true;
12261      /* The standard says that a condition can be:
12262
12263	    type-specifier-seq declarator = assignment-expression
12264
12265	 However, given:
12266
12267	   struct S {};
12268	   if (int S = ...)
12269
12270	 we should treat the "S" as a declarator, not as a
12271	 type-specifier.  The standard doesn't say that explicitly for
12272	 type-specifier-seq, but it does say that for
12273	 decl-specifier-seq in an ordinary declaration.  Perhaps it
12274	 would be clearer just to allow a decl-specifier-seq here, and
12275	 then add a semantic restriction that if any decl-specifiers
12276	 that are not type-specifiers appear, the program is invalid.  */
12277      if (is_condition && !is_cv_qualifier)
12278	flags |= CP_PARSER_FLAGS_NO_USER_DEFINED_TYPES;
12279    }
12280
12281  cp_parser_check_decl_spec (type_specifier_seq);
12282}
12283
12284/* Parse a parameter-declaration-clause.
12285
12286   parameter-declaration-clause:
12287     parameter-declaration-list [opt] ... [opt]
12288     parameter-declaration-list , ...
12289
12290   Returns a representation for the parameter declarations.  A return
12291   value of NULL indicates a parameter-declaration-clause consisting
12292   only of an ellipsis.  */
12293
12294static cp_parameter_declarator *
12295cp_parser_parameter_declaration_clause (cp_parser* parser)
12296{
12297  cp_parameter_declarator *parameters;
12298  cp_token *token;
12299  bool ellipsis_p;
12300  bool is_error;
12301
12302  /* Peek at the next token.  */
12303  token = cp_lexer_peek_token (parser->lexer);
12304  /* Check for trivial parameter-declaration-clauses.  */
12305  if (token->type == CPP_ELLIPSIS)
12306    {
12307      /* Consume the `...' token.  */
12308      cp_lexer_consume_token (parser->lexer);
12309      return NULL;
12310    }
12311  else if (token->type == CPP_CLOSE_PAREN)
12312    /* There are no parameters.  */
12313    {
12314#ifndef NO_IMPLICIT_EXTERN_C
12315      if (in_system_header && current_class_type == NULL
12316	  && current_lang_name == lang_name_c)
12317	return NULL;
12318      else
12319#endif
12320	return no_parameters;
12321    }
12322  /* Check for `(void)', too, which is a special case.  */
12323  else if (token->keyword == RID_VOID
12324	   && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
12325	       == CPP_CLOSE_PAREN))
12326    {
12327      /* Consume the `void' token.  */
12328      cp_lexer_consume_token (parser->lexer);
12329      /* There are no parameters.  */
12330      return no_parameters;
12331    }
12332
12333  /* Parse the parameter-declaration-list.  */
12334  parameters = cp_parser_parameter_declaration_list (parser, &is_error);
12335  /* If a parse error occurred while parsing the
12336     parameter-declaration-list, then the entire
12337     parameter-declaration-clause is erroneous.  */
12338  if (is_error)
12339    return NULL;
12340
12341  /* Peek at the next token.  */
12342  token = cp_lexer_peek_token (parser->lexer);
12343  /* If it's a `,', the clause should terminate with an ellipsis.  */
12344  if (token->type == CPP_COMMA)
12345    {
12346      /* Consume the `,'.  */
12347      cp_lexer_consume_token (parser->lexer);
12348      /* Expect an ellipsis.  */
12349      ellipsis_p
12350	= (cp_parser_require (parser, CPP_ELLIPSIS, "`...'") != NULL);
12351    }
12352  /* It might also be `...' if the optional trailing `,' was
12353     omitted.  */
12354  else if (token->type == CPP_ELLIPSIS)
12355    {
12356      /* Consume the `...' token.  */
12357      cp_lexer_consume_token (parser->lexer);
12358      /* And remember that we saw it.  */
12359      ellipsis_p = true;
12360    }
12361  else
12362    ellipsis_p = false;
12363
12364  /* Finish the parameter list.  */
12365  if (parameters && ellipsis_p)
12366    parameters->ellipsis_p = true;
12367
12368  return parameters;
12369}
12370
12371/* Parse a parameter-declaration-list.
12372
12373   parameter-declaration-list:
12374     parameter-declaration
12375     parameter-declaration-list , parameter-declaration
12376
12377   Returns a representation of the parameter-declaration-list, as for
12378   cp_parser_parameter_declaration_clause.  However, the
12379   `void_list_node' is never appended to the list.  Upon return,
12380   *IS_ERROR will be true iff an error occurred.  */
12381
12382static cp_parameter_declarator *
12383cp_parser_parameter_declaration_list (cp_parser* parser, bool *is_error)
12384{
12385  cp_parameter_declarator *parameters = NULL;
12386  cp_parameter_declarator **tail = &parameters;
12387  bool saved_in_unbraced_linkage_specification_p;
12388
12389  /* Assume all will go well.  */
12390  *is_error = false;
12391  /* The special considerations that apply to a function within an
12392     unbraced linkage specifications do not apply to the parameters
12393     to the function.  */
12394  saved_in_unbraced_linkage_specification_p
12395    = parser->in_unbraced_linkage_specification_p;
12396  parser->in_unbraced_linkage_specification_p = false;
12397
12398  /* Look for more parameters.  */
12399  while (true)
12400    {
12401      cp_parameter_declarator *parameter;
12402      bool parenthesized_p;
12403      /* Parse the parameter.  */
12404      parameter
12405	= cp_parser_parameter_declaration (parser,
12406					   /*template_parm_p=*/false,
12407					   &parenthesized_p);
12408
12409      /* If a parse error occurred parsing the parameter declaration,
12410	 then the entire parameter-declaration-list is erroneous.  */
12411      if (!parameter)
12412	{
12413	  *is_error = true;
12414	  parameters = NULL;
12415	  break;
12416	}
12417      /* Add the new parameter to the list.  */
12418      *tail = parameter;
12419      tail = &parameter->next;
12420
12421      /* Peek at the next token.  */
12422      if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN)
12423	  || cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)
12424	  /* These are for Objective-C++ */
12425	  || cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
12426	  || cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
12427	/* The parameter-declaration-list is complete.  */
12428	break;
12429      else if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12430	{
12431	  cp_token *token;
12432
12433	  /* Peek at the next token.  */
12434	  token = cp_lexer_peek_nth_token (parser->lexer, 2);
12435	  /* If it's an ellipsis, then the list is complete.  */
12436	  if (token->type == CPP_ELLIPSIS)
12437	    break;
12438	  /* Otherwise, there must be more parameters.  Consume the
12439	     `,'.  */
12440	  cp_lexer_consume_token (parser->lexer);
12441	  /* When parsing something like:
12442
12443		int i(float f, double d)
12444
12445	     we can tell after seeing the declaration for "f" that we
12446	     are not looking at an initialization of a variable "i",
12447	     but rather at the declaration of a function "i".
12448
12449	     Due to the fact that the parsing of template arguments
12450	     (as specified to a template-id) requires backtracking we
12451	     cannot use this technique when inside a template argument
12452	     list.  */
12453	  if (!parser->in_template_argument_list_p
12454	      && !parser->in_type_id_in_expr_p
12455	      && cp_parser_uncommitted_to_tentative_parse_p (parser)
12456	      /* However, a parameter-declaration of the form
12457		 "foat(f)" (which is a valid declaration of a
12458		 parameter "f") can also be interpreted as an
12459		 expression (the conversion of "f" to "float").  */
12460	      && !parenthesized_p)
12461	    cp_parser_commit_to_tentative_parse (parser);
12462	}
12463      else
12464	{
12465	  cp_parser_error (parser, "expected %<,%> or %<...%>");
12466	  if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
12467	    cp_parser_skip_to_closing_parenthesis (parser,
12468						   /*recovering=*/true,
12469						   /*or_comma=*/false,
12470						   /*consume_paren=*/false);
12471	  break;
12472	}
12473    }
12474
12475  parser->in_unbraced_linkage_specification_p
12476    = saved_in_unbraced_linkage_specification_p;
12477
12478  return parameters;
12479}
12480
12481/* Parse a parameter declaration.
12482
12483   parameter-declaration:
12484     decl-specifier-seq declarator
12485     decl-specifier-seq declarator = assignment-expression
12486     decl-specifier-seq abstract-declarator [opt]
12487     decl-specifier-seq abstract-declarator [opt] = assignment-expression
12488
12489   If TEMPLATE_PARM_P is TRUE, then this parameter-declaration
12490   declares a template parameter.  (In that case, a non-nested `>'
12491   token encountered during the parsing of the assignment-expression
12492   is not interpreted as a greater-than operator.)
12493
12494   Returns a representation of the parameter, or NULL if an error
12495   occurs.  If PARENTHESIZED_P is non-NULL, *PARENTHESIZED_P is set to
12496   true iff the declarator is of the form "(p)".  */
12497
12498static cp_parameter_declarator *
12499cp_parser_parameter_declaration (cp_parser *parser,
12500				 bool template_parm_p,
12501				 bool *parenthesized_p)
12502{
12503  int declares_class_or_enum;
12504  bool greater_than_is_operator_p;
12505  cp_decl_specifier_seq decl_specifiers;
12506  cp_declarator *declarator;
12507  tree default_argument;
12508  cp_token *token;
12509  const char *saved_message;
12510
12511  /* In a template parameter, `>' is not an operator.
12512
12513     [temp.param]
12514
12515     When parsing a default template-argument for a non-type
12516     template-parameter, the first non-nested `>' is taken as the end
12517     of the template parameter-list rather than a greater-than
12518     operator.  */
12519  greater_than_is_operator_p = !template_parm_p;
12520
12521  /* Type definitions may not appear in parameter types.  */
12522  saved_message = parser->type_definition_forbidden_message;
12523  parser->type_definition_forbidden_message
12524    = "types may not be defined in parameter types";
12525
12526  /* Parse the declaration-specifiers.  */
12527  cp_parser_decl_specifier_seq (parser,
12528				CP_PARSER_FLAGS_NONE,
12529				&decl_specifiers,
12530				&declares_class_or_enum);
12531  /* If an error occurred, there's no reason to attempt to parse the
12532     rest of the declaration.  */
12533  if (cp_parser_error_occurred (parser))
12534    {
12535      parser->type_definition_forbidden_message = saved_message;
12536      return NULL;
12537    }
12538
12539  /* Peek at the next token.  */
12540  token = cp_lexer_peek_token (parser->lexer);
12541  /* If the next token is a `)', `,', `=', `>', or `...', then there
12542     is no declarator.  */
12543  if (token->type == CPP_CLOSE_PAREN
12544      || token->type == CPP_COMMA
12545      || token->type == CPP_EQ
12546      || token->type == CPP_ELLIPSIS
12547      || token->type == CPP_GREATER)
12548    {
12549      declarator = NULL;
12550      if (parenthesized_p)
12551	*parenthesized_p = false;
12552    }
12553  /* Otherwise, there should be a declarator.  */
12554  else
12555    {
12556      bool saved_default_arg_ok_p = parser->default_arg_ok_p;
12557      parser->default_arg_ok_p = false;
12558
12559      /* After seeing a decl-specifier-seq, if the next token is not a
12560	 "(", there is no possibility that the code is a valid
12561	 expression.  Therefore, if parsing tentatively, we commit at
12562	 this point.  */
12563      if (!parser->in_template_argument_list_p
12564	  /* In an expression context, having seen:
12565
12566	       (int((char ...
12567
12568	     we cannot be sure whether we are looking at a
12569	     function-type (taking a "char" as a parameter) or a cast
12570	     of some object of type "char" to "int".  */
12571	  && !parser->in_type_id_in_expr_p
12572	  && cp_parser_uncommitted_to_tentative_parse_p (parser)
12573	  && cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_PAREN))
12574	cp_parser_commit_to_tentative_parse (parser);
12575      /* Parse the declarator.  */
12576      declarator = cp_parser_declarator (parser,
12577					 CP_PARSER_DECLARATOR_EITHER,
12578					 /*ctor_dtor_or_conv_p=*/NULL,
12579					 parenthesized_p,
12580					 /*member_p=*/false);
12581      parser->default_arg_ok_p = saved_default_arg_ok_p;
12582      /* After the declarator, allow more attributes.  */
12583      decl_specifiers.attributes
12584	= chainon (decl_specifiers.attributes,
12585		   cp_parser_attributes_opt (parser));
12586    }
12587
12588  /* The restriction on defining new types applies only to the type
12589     of the parameter, not to the default argument.  */
12590  parser->type_definition_forbidden_message = saved_message;
12591
12592  /* If the next token is `=', then process a default argument.  */
12593  if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
12594    {
12595      bool saved_greater_than_is_operator_p;
12596      /* Consume the `='.  */
12597      cp_lexer_consume_token (parser->lexer);
12598
12599      /* If we are defining a class, then the tokens that make up the
12600	 default argument must be saved and processed later.  */
12601      if (!template_parm_p && at_class_scope_p ()
12602	  && TYPE_BEING_DEFINED (current_class_type))
12603	{
12604	  unsigned depth = 0;
12605	  cp_token *first_token;
12606	  cp_token *token;
12607
12608	  /* Add tokens until we have processed the entire default
12609	     argument.  We add the range [first_token, token).  */
12610	  first_token = cp_lexer_peek_token (parser->lexer);
12611	  while (true)
12612	    {
12613	      bool done = false;
12614
12615	      /* Peek at the next token.  */
12616	      token = cp_lexer_peek_token (parser->lexer);
12617	      /* What we do depends on what token we have.  */
12618	      switch (token->type)
12619		{
12620		  /* In valid code, a default argument must be
12621		     immediately followed by a `,' `)', or `...'.  */
12622		case CPP_COMMA:
12623		case CPP_CLOSE_PAREN:
12624		case CPP_ELLIPSIS:
12625		  /* If we run into a non-nested `;', `}', or `]',
12626		     then the code is invalid -- but the default
12627		     argument is certainly over.  */
12628		case CPP_SEMICOLON:
12629		case CPP_CLOSE_BRACE:
12630		case CPP_CLOSE_SQUARE:
12631		  if (depth == 0)
12632		    done = true;
12633		  /* Update DEPTH, if necessary.  */
12634		  else if (token->type == CPP_CLOSE_PAREN
12635			   || token->type == CPP_CLOSE_BRACE
12636			   || token->type == CPP_CLOSE_SQUARE)
12637		    --depth;
12638		  break;
12639
12640		case CPP_OPEN_PAREN:
12641		case CPP_OPEN_SQUARE:
12642		case CPP_OPEN_BRACE:
12643		  ++depth;
12644		  break;
12645
12646		case CPP_GREATER:
12647		  /* If we see a non-nested `>', and `>' is not an
12648		     operator, then it marks the end of the default
12649		     argument.  */
12650		  if (!depth && !greater_than_is_operator_p)
12651		    done = true;
12652		  break;
12653
12654		  /* If we run out of tokens, issue an error message.  */
12655		case CPP_EOF:
12656		case CPP_PRAGMA_EOL:
12657		  error ("file ends in default argument");
12658		  done = true;
12659		  break;
12660
12661		case CPP_NAME:
12662		case CPP_SCOPE:
12663		  /* In these cases, we should look for template-ids.
12664		     For example, if the default argument is
12665		     `X<int, double>()', we need to do name lookup to
12666		     figure out whether or not `X' is a template; if
12667		     so, the `,' does not end the default argument.
12668
12669		     That is not yet done.  */
12670		  break;
12671
12672		default:
12673		  break;
12674		}
12675
12676	      /* If we've reached the end, stop.  */
12677	      if (done)
12678		break;
12679
12680	      /* Add the token to the token block.  */
12681	      token = cp_lexer_consume_token (parser->lexer);
12682	    }
12683
12684	  /* Create a DEFAULT_ARG to represented the unparsed default
12685	     argument.  */
12686	  default_argument = make_node (DEFAULT_ARG);
12687	  DEFARG_TOKENS (default_argument)
12688	    = cp_token_cache_new (first_token, token);
12689	  DEFARG_INSTANTIATIONS (default_argument) = NULL;
12690	}
12691      /* Outside of a class definition, we can just parse the
12692	 assignment-expression.  */
12693      else
12694	{
12695	  bool saved_local_variables_forbidden_p;
12696
12697	  /* Make sure that PARSER->GREATER_THAN_IS_OPERATOR_P is
12698	     set correctly.  */
12699	  saved_greater_than_is_operator_p
12700	    = parser->greater_than_is_operator_p;
12701	  parser->greater_than_is_operator_p = greater_than_is_operator_p;
12702	  /* Local variable names (and the `this' keyword) may not
12703	     appear in a default argument.  */
12704	  saved_local_variables_forbidden_p
12705	    = parser->local_variables_forbidden_p;
12706	  parser->local_variables_forbidden_p = true;
12707	  /* The default argument expression may cause implicitly
12708	     defined member functions to be synthesized, which will
12709	     result in garbage collection.  We must treat this
12710	     situation as if we were within the body of function so as
12711	     to avoid collecting live data on the stack.  */
12712	  ++function_depth;
12713	  /* Parse the assignment-expression.  */
12714	  if (template_parm_p)
12715	    push_deferring_access_checks (dk_no_deferred);
12716	  default_argument
12717	    = cp_parser_assignment_expression (parser, /*cast_p=*/false);
12718	  if (template_parm_p)
12719	    pop_deferring_access_checks ();
12720	  /* Restore saved state.  */
12721	  --function_depth;
12722	  parser->greater_than_is_operator_p
12723	    = saved_greater_than_is_operator_p;
12724	  parser->local_variables_forbidden_p
12725	    = saved_local_variables_forbidden_p;
12726	}
12727      if (!parser->default_arg_ok_p)
12728	{
12729	  if (!flag_pedantic_errors)
12730	    warning (0, "deprecated use of default argument for parameter of non-function");
12731	  else
12732	    {
12733	      error ("default arguments are only permitted for function parameters");
12734	      default_argument = NULL_TREE;
12735	    }
12736	}
12737    }
12738  else
12739    default_argument = NULL_TREE;
12740
12741  return make_parameter_declarator (&decl_specifiers,
12742				    declarator,
12743				    default_argument);
12744}
12745
12746/* Parse a function-body.
12747
12748   function-body:
12749     compound_statement  */
12750
12751static void
12752cp_parser_function_body (cp_parser *parser)
12753{
12754  cp_parser_compound_statement (parser, NULL, false);
12755}
12756
12757/* Parse a ctor-initializer-opt followed by a function-body.  Return
12758   true if a ctor-initializer was present.  */
12759
12760static bool
12761cp_parser_ctor_initializer_opt_and_function_body (cp_parser *parser)
12762{
12763  tree body;
12764  bool ctor_initializer_p;
12765
12766  /* Begin the function body.  */
12767  body = begin_function_body ();
12768  /* Parse the optional ctor-initializer.  */
12769  ctor_initializer_p = cp_parser_ctor_initializer_opt (parser);
12770  /* Parse the function-body.  */
12771  cp_parser_function_body (parser);
12772  /* Finish the function body.  */
12773  finish_function_body (body);
12774
12775  return ctor_initializer_p;
12776}
12777
12778/* Parse an initializer.
12779
12780   initializer:
12781     = initializer-clause
12782     ( expression-list )
12783
12784   Returns an expression representing the initializer.  If no
12785   initializer is present, NULL_TREE is returned.
12786
12787   *IS_PARENTHESIZED_INIT is set to TRUE if the `( expression-list )'
12788   production is used, and zero otherwise.  *IS_PARENTHESIZED_INIT is
12789   set to FALSE if there is no initializer present.  If there is an
12790   initializer, and it is not a constant-expression, *NON_CONSTANT_P
12791   is set to true; otherwise it is set to false.  */
12792
12793static tree
12794cp_parser_initializer (cp_parser* parser, bool* is_parenthesized_init,
12795		       bool* non_constant_p)
12796{
12797  cp_token *token;
12798  tree init;
12799
12800  /* Peek at the next token.  */
12801  token = cp_lexer_peek_token (parser->lexer);
12802
12803  /* Let our caller know whether or not this initializer was
12804     parenthesized.  */
12805  *is_parenthesized_init = (token->type == CPP_OPEN_PAREN);
12806  /* Assume that the initializer is constant.  */
12807  *non_constant_p = false;
12808
12809  if (token->type == CPP_EQ)
12810    {
12811      /* Consume the `='.  */
12812      cp_lexer_consume_token (parser->lexer);
12813      /* Parse the initializer-clause.  */
12814      init = cp_parser_initializer_clause (parser, non_constant_p);
12815    }
12816  else if (token->type == CPP_OPEN_PAREN)
12817    init = cp_parser_parenthesized_expression_list (parser, false,
12818						    /*cast_p=*/false,
12819						    non_constant_p);
12820  else
12821    {
12822      /* Anything else is an error.  */
12823      cp_parser_error (parser, "expected initializer");
12824      init = error_mark_node;
12825    }
12826
12827  return init;
12828}
12829
12830/* Parse an initializer-clause.
12831
12832   initializer-clause:
12833     assignment-expression
12834     { initializer-list , [opt] }
12835     { }
12836
12837   Returns an expression representing the initializer.
12838
12839   If the `assignment-expression' production is used the value
12840   returned is simply a representation for the expression.
12841
12842   Otherwise, a CONSTRUCTOR is returned.  The CONSTRUCTOR_ELTS will be
12843   the elements of the initializer-list (or NULL, if the last
12844   production is used).  The TREE_TYPE for the CONSTRUCTOR will be
12845   NULL_TREE.  There is no way to detect whether or not the optional
12846   trailing `,' was provided.  NON_CONSTANT_P is as for
12847   cp_parser_initializer.  */
12848
12849static tree
12850cp_parser_initializer_clause (cp_parser* parser, bool* non_constant_p)
12851{
12852  tree initializer;
12853
12854  /* Assume the expression is constant.  */
12855  *non_constant_p = false;
12856
12857  /* If it is not a `{', then we are looking at an
12858     assignment-expression.  */
12859  if (cp_lexer_next_token_is_not (parser->lexer, CPP_OPEN_BRACE))
12860    {
12861      initializer
12862	= cp_parser_constant_expression (parser,
12863					/*allow_non_constant_p=*/true,
12864					non_constant_p);
12865      if (!*non_constant_p)
12866	initializer = fold_non_dependent_expr (initializer);
12867    }
12868  else
12869    {
12870      /* Consume the `{' token.  */
12871      cp_lexer_consume_token (parser->lexer);
12872      /* Create a CONSTRUCTOR to represent the braced-initializer.  */
12873      initializer = make_node (CONSTRUCTOR);
12874      /* If it's not a `}', then there is a non-trivial initializer.  */
12875      if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_BRACE))
12876	{
12877	  /* Parse the initializer list.  */
12878	  CONSTRUCTOR_ELTS (initializer)
12879	    = cp_parser_initializer_list (parser, non_constant_p);
12880	  /* A trailing `,' token is allowed.  */
12881	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
12882	    cp_lexer_consume_token (parser->lexer);
12883	}
12884      /* Now, there should be a trailing `}'.  */
12885      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
12886    }
12887
12888  return initializer;
12889}
12890
12891/* Parse an initializer-list.
12892
12893   initializer-list:
12894     initializer-clause
12895     initializer-list , initializer-clause
12896
12897   GNU Extension:
12898
12899   initializer-list:
12900     identifier : initializer-clause
12901     initializer-list, identifier : initializer-clause
12902
12903   Returns a VEC of constructor_elt.  The VALUE of each elt is an expression
12904   for the initializer.  If the INDEX of the elt is non-NULL, it is the
12905   IDENTIFIER_NODE naming the field to initialize.  NON_CONSTANT_P is
12906   as for cp_parser_initializer.  */
12907
12908static VEC(constructor_elt,gc) *
12909cp_parser_initializer_list (cp_parser* parser, bool* non_constant_p)
12910{
12911  VEC(constructor_elt,gc) *v = NULL;
12912
12913  /* Assume all of the expressions are constant.  */
12914  *non_constant_p = false;
12915
12916  /* Parse the rest of the list.  */
12917  while (true)
12918    {
12919      cp_token *token;
12920      tree identifier;
12921      tree initializer;
12922      bool clause_non_constant_p;
12923
12924      /* If the next token is an identifier and the following one is a
12925	 colon, we are looking at the GNU designated-initializer
12926	 syntax.  */
12927      if (cp_parser_allow_gnu_extensions_p (parser)
12928	  && cp_lexer_next_token_is (parser->lexer, CPP_NAME)
12929	  && cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_COLON)
12930	{
12931	  /* Warn the user that they are using an extension.  */
12932	  if (pedantic)
12933	    pedwarn ("ISO C++ does not allow designated initializers");
12934	  /* Consume the identifier.  */
12935	  identifier = cp_lexer_consume_token (parser->lexer)->u.value;
12936	  /* Consume the `:'.  */
12937	  cp_lexer_consume_token (parser->lexer);
12938	}
12939      else
12940	identifier = NULL_TREE;
12941
12942      /* Parse the initializer.  */
12943      initializer = cp_parser_initializer_clause (parser,
12944						  &clause_non_constant_p);
12945      /* If any clause is non-constant, so is the entire initializer.  */
12946      if (clause_non_constant_p)
12947	*non_constant_p = true;
12948
12949      /* Add it to the vector.  */
12950      CONSTRUCTOR_APPEND_ELT(v, identifier, initializer);
12951
12952      /* If the next token is not a comma, we have reached the end of
12953	 the list.  */
12954      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
12955	break;
12956
12957      /* Peek at the next token.  */
12958      token = cp_lexer_peek_nth_token (parser->lexer, 2);
12959      /* If the next token is a `}', then we're still done.  An
12960	 initializer-clause can have a trailing `,' after the
12961	 initializer-list and before the closing `}'.  */
12962      if (token->type == CPP_CLOSE_BRACE)
12963	break;
12964
12965      /* Consume the `,' token.  */
12966      cp_lexer_consume_token (parser->lexer);
12967    }
12968
12969  return v;
12970}
12971
12972/* Classes [gram.class] */
12973
12974/* Parse a class-name.
12975
12976   class-name:
12977     identifier
12978     template-id
12979
12980   TYPENAME_KEYWORD_P is true iff the `typename' keyword has been used
12981   to indicate that names looked up in dependent types should be
12982   assumed to be types.  TEMPLATE_KEYWORD_P is true iff the `template'
12983   keyword has been used to indicate that the name that appears next
12984   is a template.  TAG_TYPE indicates the explicit tag given before
12985   the type name, if any.  If CHECK_DEPENDENCY_P is FALSE, names are
12986   looked up in dependent scopes.  If CLASS_HEAD_P is TRUE, this class
12987   is the class being defined in a class-head.
12988
12989   Returns the TYPE_DECL representing the class.  */
12990
12991static tree
12992cp_parser_class_name (cp_parser *parser,
12993		      bool typename_keyword_p,
12994		      bool template_keyword_p,
12995		      enum tag_types tag_type,
12996		      bool check_dependency_p,
12997		      bool class_head_p,
12998		      bool is_declaration)
12999{
13000  tree decl;
13001  tree scope;
13002  bool typename_p;
13003  cp_token *token;
13004
13005  /* All class-names start with an identifier.  */
13006  token = cp_lexer_peek_token (parser->lexer);
13007  if (token->type != CPP_NAME && token->type != CPP_TEMPLATE_ID)
13008    {
13009      cp_parser_error (parser, "expected class-name");
13010      return error_mark_node;
13011    }
13012
13013  /* PARSER->SCOPE can be cleared when parsing the template-arguments
13014     to a template-id, so we save it here.  */
13015  scope = parser->scope;
13016  if (scope == error_mark_node)
13017    return error_mark_node;
13018
13019  /* Any name names a type if we're following the `typename' keyword
13020     in a qualified name where the enclosing scope is type-dependent.  */
13021  typename_p = (typename_keyword_p && scope && TYPE_P (scope)
13022		&& dependent_type_p (scope));
13023  /* Handle the common case (an identifier, but not a template-id)
13024     efficiently.  */
13025  if (token->type == CPP_NAME
13026      && !cp_parser_nth_token_starts_template_argument_list_p (parser, 2))
13027    {
13028      cp_token *identifier_token;
13029      tree identifier;
13030      bool ambiguous_p;
13031
13032      /* Look for the identifier.  */
13033      identifier_token = cp_lexer_peek_token (parser->lexer);
13034      ambiguous_p = identifier_token->ambiguous_p;
13035      identifier = cp_parser_identifier (parser);
13036      /* If the next token isn't an identifier, we are certainly not
13037	 looking at a class-name.  */
13038      if (identifier == error_mark_node)
13039	decl = error_mark_node;
13040      /* If we know this is a type-name, there's no need to look it
13041	 up.  */
13042      else if (typename_p)
13043	decl = identifier;
13044      else
13045	{
13046	  tree ambiguous_decls;
13047	  /* If we already know that this lookup is ambiguous, then
13048	     we've already issued an error message; there's no reason
13049	     to check again.  */
13050	  if (ambiguous_p)
13051	    {
13052	      cp_parser_simulate_error (parser);
13053	      return error_mark_node;
13054	    }
13055	  /* If the next token is a `::', then the name must be a type
13056	     name.
13057
13058	     [basic.lookup.qual]
13059
13060	     During the lookup for a name preceding the :: scope
13061	     resolution operator, object, function, and enumerator
13062	     names are ignored.  */
13063	  if (cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13064	    tag_type = typename_type;
13065	  /* Look up the name.  */
13066	  decl = cp_parser_lookup_name (parser, identifier,
13067					tag_type,
13068					/*is_template=*/false,
13069					/*is_namespace=*/false,
13070					check_dependency_p,
13071					&ambiguous_decls);
13072	  if (ambiguous_decls)
13073	    {
13074	      error ("reference to %qD is ambiguous", identifier);
13075	      print_candidates (ambiguous_decls);
13076	      if (cp_parser_parsing_tentatively (parser))
13077		{
13078		  identifier_token->ambiguous_p = true;
13079		  cp_parser_simulate_error (parser);
13080		}
13081	      return error_mark_node;
13082	    }
13083	}
13084    }
13085  else
13086    {
13087      /* Try a template-id.  */
13088      decl = cp_parser_template_id (parser, template_keyword_p,
13089				    check_dependency_p,
13090				    is_declaration);
13091      if (decl == error_mark_node)
13092	return error_mark_node;
13093    }
13094
13095  decl = cp_parser_maybe_treat_template_as_class (decl, class_head_p);
13096
13097  /* If this is a typename, create a TYPENAME_TYPE.  */
13098  if (typename_p && decl != error_mark_node)
13099    {
13100      decl = make_typename_type (scope, decl, typename_type,
13101				 /*complain=*/tf_error);
13102      if (decl != error_mark_node)
13103	decl = TYPE_NAME (decl);
13104    }
13105
13106  /* Check to see that it is really the name of a class.  */
13107  if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
13108      && TREE_CODE (TREE_OPERAND (decl, 0)) == IDENTIFIER_NODE
13109      && cp_lexer_next_token_is (parser->lexer, CPP_SCOPE))
13110    /* Situations like this:
13111
13112	 template <typename T> struct A {
13113	   typename T::template X<int>::I i;
13114	 };
13115
13116       are problematic.  Is `T::template X<int>' a class-name?  The
13117       standard does not seem to be definitive, but there is no other
13118       valid interpretation of the following `::'.  Therefore, those
13119       names are considered class-names.  */
13120    {
13121      decl = make_typename_type (scope, decl, tag_type, tf_error);
13122      if (decl != error_mark_node)
13123	decl = TYPE_NAME (decl);
13124    }
13125  else if (TREE_CODE (decl) != TYPE_DECL
13126	   || TREE_TYPE (decl) == error_mark_node
13127	   || !IS_AGGR_TYPE (TREE_TYPE (decl)))
13128    decl = error_mark_node;
13129
13130  if (decl == error_mark_node)
13131    cp_parser_error (parser, "expected class-name");
13132
13133  return decl;
13134}
13135
13136/* Parse a class-specifier.
13137
13138   class-specifier:
13139     class-head { member-specification [opt] }
13140
13141   Returns the TREE_TYPE representing the class.  */
13142
13143static tree
13144cp_parser_class_specifier (cp_parser* parser)
13145{
13146  cp_token *token;
13147  tree type;
13148  tree attributes = NULL_TREE;
13149  int has_trailing_semicolon;
13150  bool nested_name_specifier_p;
13151  unsigned saved_num_template_parameter_lists;
13152  bool saved_in_function_body;
13153  tree old_scope = NULL_TREE;
13154  tree scope = NULL_TREE;
13155  tree bases;
13156
13157  push_deferring_access_checks (dk_no_deferred);
13158
13159  /* Parse the class-head.  */
13160  type = cp_parser_class_head (parser,
13161			       &nested_name_specifier_p,
13162			       &attributes,
13163			       &bases);
13164  /* If the class-head was a semantic disaster, skip the entire body
13165     of the class.  */
13166  if (!type)
13167    {
13168      cp_parser_skip_to_end_of_block_or_statement (parser);
13169      pop_deferring_access_checks ();
13170      return error_mark_node;
13171    }
13172
13173  /* Look for the `{'.  */
13174  if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
13175    {
13176      pop_deferring_access_checks ();
13177      return error_mark_node;
13178    }
13179
13180  /* Process the base classes. If they're invalid, skip the
13181     entire class body.  */
13182  if (!xref_basetypes (type, bases))
13183    {
13184      cp_parser_skip_to_closing_brace (parser);
13185
13186      /* Consuming the closing brace yields better error messages
13187         later on.  */
13188      cp_lexer_consume_token (parser->lexer);
13189      pop_deferring_access_checks ();
13190      return error_mark_node;
13191    }
13192
13193  /* Issue an error message if type-definitions are forbidden here.  */
13194  cp_parser_check_type_definition (parser);
13195  /* Remember that we are defining one more class.  */
13196  ++parser->num_classes_being_defined;
13197  /* Inside the class, surrounding template-parameter-lists do not
13198     apply.  */
13199  saved_num_template_parameter_lists
13200    = parser->num_template_parameter_lists;
13201  parser->num_template_parameter_lists = 0;
13202  /* We are not in a function body.  */
13203  saved_in_function_body = parser->in_function_body;
13204  parser->in_function_body = false;
13205
13206  /* Start the class.  */
13207  if (nested_name_specifier_p)
13208    {
13209      scope = CP_DECL_CONTEXT (TYPE_MAIN_DECL (type));
13210      old_scope = push_inner_scope (scope);
13211    }
13212  type = begin_class_definition (type, attributes);
13213
13214  if (type == error_mark_node)
13215    /* If the type is erroneous, skip the entire body of the class.  */
13216    cp_parser_skip_to_closing_brace (parser);
13217  else
13218    /* Parse the member-specification.  */
13219    cp_parser_member_specification_opt (parser);
13220
13221  /* Look for the trailing `}'.  */
13222  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
13223  /* We get better error messages by noticing a common problem: a
13224     missing trailing `;'.  */
13225  token = cp_lexer_peek_token (parser->lexer);
13226  has_trailing_semicolon = (token->type == CPP_SEMICOLON);
13227  /* Look for trailing attributes to apply to this class.  */
13228  if (cp_parser_allow_gnu_extensions_p (parser))
13229    attributes = cp_parser_attributes_opt (parser);
13230  if (type != error_mark_node)
13231    type = finish_struct (type, attributes);
13232  if (nested_name_specifier_p)
13233    pop_inner_scope (old_scope, scope);
13234  /* If this class is not itself within the scope of another class,
13235     then we need to parse the bodies of all of the queued function
13236     definitions.  Note that the queued functions defined in a class
13237     are not always processed immediately following the
13238     class-specifier for that class.  Consider:
13239
13240       struct A {
13241	 struct B { void f() { sizeof (A); } };
13242       };
13243
13244     If `f' were processed before the processing of `A' were
13245     completed, there would be no way to compute the size of `A'.
13246     Note that the nesting we are interested in here is lexical --
13247     not the semantic nesting given by TYPE_CONTEXT.  In particular,
13248     for:
13249
13250       struct A { struct B; };
13251       struct A::B { void f() { } };
13252
13253     there is no need to delay the parsing of `A::B::f'.  */
13254  if (--parser->num_classes_being_defined == 0)
13255    {
13256      tree queue_entry;
13257      tree fn;
13258      tree class_type = NULL_TREE;
13259      tree pushed_scope = NULL_TREE;
13260
13261      /* In a first pass, parse default arguments to the functions.
13262	 Then, in a second pass, parse the bodies of the functions.
13263	 This two-phased approach handles cases like:
13264
13265	    struct S {
13266	      void f() { g(); }
13267	      void g(int i = 3);
13268	    };
13269
13270	 */
13271      for (TREE_PURPOSE (parser->unparsed_functions_queues)
13272	     = nreverse (TREE_PURPOSE (parser->unparsed_functions_queues));
13273	   (queue_entry = TREE_PURPOSE (parser->unparsed_functions_queues));
13274	   TREE_PURPOSE (parser->unparsed_functions_queues)
13275	     = TREE_CHAIN (TREE_PURPOSE (parser->unparsed_functions_queues)))
13276	{
13277	  fn = TREE_VALUE (queue_entry);
13278	  /* If there are default arguments that have not yet been processed,
13279	     take care of them now.  */
13280	  if (class_type != TREE_PURPOSE (queue_entry))
13281	    {
13282	      if (pushed_scope)
13283		pop_scope (pushed_scope);
13284	      class_type = TREE_PURPOSE (queue_entry);
13285	      pushed_scope = push_scope (class_type);
13286	    }
13287	  /* Make sure that any template parameters are in scope.  */
13288	  maybe_begin_member_template_processing (fn);
13289	  /* Parse the default argument expressions.  */
13290	  cp_parser_late_parsing_default_args (parser, fn);
13291	  /* Remove any template parameters from the symbol table.  */
13292	  maybe_end_member_template_processing ();
13293	}
13294      if (pushed_scope)
13295	pop_scope (pushed_scope);
13296      /* Now parse the body of the functions.  */
13297      for (TREE_VALUE (parser->unparsed_functions_queues)
13298	     = nreverse (TREE_VALUE (parser->unparsed_functions_queues));
13299	   (queue_entry = TREE_VALUE (parser->unparsed_functions_queues));
13300	   TREE_VALUE (parser->unparsed_functions_queues)
13301	     = TREE_CHAIN (TREE_VALUE (parser->unparsed_functions_queues)))
13302	{
13303	  /* Figure out which function we need to process.  */
13304	  fn = TREE_VALUE (queue_entry);
13305	  /* Parse the function.  */
13306	  cp_parser_late_parsing_for_member (parser, fn);
13307	}
13308    }
13309
13310  /* Put back any saved access checks.  */
13311  pop_deferring_access_checks ();
13312
13313  /* Restore saved state.  */
13314  parser->in_function_body = saved_in_function_body;
13315  parser->num_template_parameter_lists
13316    = saved_num_template_parameter_lists;
13317
13318  return type;
13319}
13320
13321/* Parse a class-head.
13322
13323   class-head:
13324     class-key identifier [opt] base-clause [opt]
13325     class-key nested-name-specifier identifier base-clause [opt]
13326     class-key nested-name-specifier [opt] template-id
13327       base-clause [opt]
13328
13329   GNU Extensions:
13330     class-key attributes identifier [opt] base-clause [opt]
13331     class-key attributes nested-name-specifier identifier base-clause [opt]
13332     class-key attributes nested-name-specifier [opt] template-id
13333       base-clause [opt]
13334
13335   Returns the TYPE of the indicated class.  Sets
13336   *NESTED_NAME_SPECIFIER_P to TRUE iff one of the productions
13337   involving a nested-name-specifier was used, and FALSE otherwise.
13338
13339   Returns error_mark_node if this is not a class-head.
13340
13341   Returns NULL_TREE if the class-head is syntactically valid, but
13342   semantically invalid in a way that means we should skip the entire
13343   body of the class.  */
13344
13345static tree
13346cp_parser_class_head (cp_parser* parser,
13347		      bool* nested_name_specifier_p,
13348		      tree *attributes_p,
13349		      tree *bases)
13350{
13351  tree nested_name_specifier;
13352  enum tag_types class_key;
13353  tree id = NULL_TREE;
13354  tree type = NULL_TREE;
13355  tree attributes;
13356  bool template_id_p = false;
13357  bool qualified_p = false;
13358  bool invalid_nested_name_p = false;
13359  bool invalid_explicit_specialization_p = false;
13360  tree pushed_scope = NULL_TREE;
13361  unsigned num_templates;
13362
13363  /* Assume no nested-name-specifier will be present.  */
13364  *nested_name_specifier_p = false;
13365  /* Assume no template parameter lists will be used in defining the
13366     type.  */
13367  num_templates = 0;
13368
13369  /* Look for the class-key.  */
13370  class_key = cp_parser_class_key (parser);
13371  if (class_key == none_type)
13372    return error_mark_node;
13373
13374  /* Parse the attributes.  */
13375  attributes = cp_parser_attributes_opt (parser);
13376
13377  /* If the next token is `::', that is invalid -- but sometimes
13378     people do try to write:
13379
13380       struct ::S {};
13381
13382     Handle this gracefully by accepting the extra qualifier, and then
13383     issuing an error about it later if this really is a
13384     class-head.  If it turns out just to be an elaborated type
13385     specifier, remain silent.  */
13386  if (cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false))
13387    qualified_p = true;
13388
13389  push_deferring_access_checks (dk_no_check);
13390
13391  /* Determine the name of the class.  Begin by looking for an
13392     optional nested-name-specifier.  */
13393  nested_name_specifier
13394    = cp_parser_nested_name_specifier_opt (parser,
13395					   /*typename_keyword_p=*/false,
13396					   /*check_dependency_p=*/false,
13397					   /*type_p=*/false,
13398					   /*is_declaration=*/false);
13399  /* If there was a nested-name-specifier, then there *must* be an
13400     identifier.  */
13401  if (nested_name_specifier)
13402    {
13403      /* Although the grammar says `identifier', it really means
13404	 `class-name' or `template-name'.  You are only allowed to
13405	 define a class that has already been declared with this
13406	 syntax.
13407
13408	 The proposed resolution for Core Issue 180 says that wherever
13409	 you see `class T::X' you should treat `X' as a type-name.
13410
13411	 It is OK to define an inaccessible class; for example:
13412
13413	   class A { class B; };
13414	   class A::B {};
13415
13416	 We do not know if we will see a class-name, or a
13417	 template-name.  We look for a class-name first, in case the
13418	 class-name is a template-id; if we looked for the
13419	 template-name first we would stop after the template-name.  */
13420      cp_parser_parse_tentatively (parser);
13421      type = cp_parser_class_name (parser,
13422				   /*typename_keyword_p=*/false,
13423				   /*template_keyword_p=*/false,
13424				   class_type,
13425				   /*check_dependency_p=*/false,
13426				   /*class_head_p=*/true,
13427				   /*is_declaration=*/false);
13428      /* If that didn't work, ignore the nested-name-specifier.  */
13429      if (!cp_parser_parse_definitely (parser))
13430	{
13431	  invalid_nested_name_p = true;
13432	  id = cp_parser_identifier (parser);
13433	  if (id == error_mark_node)
13434	    id = NULL_TREE;
13435	}
13436      /* If we could not find a corresponding TYPE, treat this
13437	 declaration like an unqualified declaration.  */
13438      if (type == error_mark_node)
13439	nested_name_specifier = NULL_TREE;
13440      /* Otherwise, count the number of templates used in TYPE and its
13441	 containing scopes.  */
13442      else
13443	{
13444	  tree scope;
13445
13446	  for (scope = TREE_TYPE (type);
13447	       scope && TREE_CODE (scope) != NAMESPACE_DECL;
13448	       scope = (TYPE_P (scope)
13449			? TYPE_CONTEXT (scope)
13450			: DECL_CONTEXT (scope)))
13451	    if (TYPE_P (scope)
13452		&& CLASS_TYPE_P (scope)
13453		&& CLASSTYPE_TEMPLATE_INFO (scope)
13454		&& PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope))
13455		&& !CLASSTYPE_TEMPLATE_SPECIALIZATION (scope))
13456	      ++num_templates;
13457	}
13458    }
13459  /* Otherwise, the identifier is optional.  */
13460  else
13461    {
13462      /* We don't know whether what comes next is a template-id,
13463	 an identifier, or nothing at all.  */
13464      cp_parser_parse_tentatively (parser);
13465      /* Check for a template-id.  */
13466      id = cp_parser_template_id (parser,
13467				  /*template_keyword_p=*/false,
13468				  /*check_dependency_p=*/true,
13469				  /*is_declaration=*/true);
13470      /* If that didn't work, it could still be an identifier.  */
13471      if (!cp_parser_parse_definitely (parser))
13472	{
13473	  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
13474	    id = cp_parser_identifier (parser);
13475	  else
13476	    id = NULL_TREE;
13477	}
13478      else
13479	{
13480	  template_id_p = true;
13481	  ++num_templates;
13482	}
13483    }
13484
13485  pop_deferring_access_checks ();
13486
13487  if (id)
13488    cp_parser_check_for_invalid_template_id (parser, id);
13489
13490  /* If it's not a `:' or a `{' then we can't really be looking at a
13491     class-head, since a class-head only appears as part of a
13492     class-specifier.  We have to detect this situation before calling
13493     xref_tag, since that has irreversible side-effects.  */
13494  if (!cp_parser_next_token_starts_class_definition_p (parser))
13495    {
13496      cp_parser_error (parser, "expected %<{%> or %<:%>");
13497      return error_mark_node;
13498    }
13499
13500  /* At this point, we're going ahead with the class-specifier, even
13501     if some other problem occurs.  */
13502  cp_parser_commit_to_tentative_parse (parser);
13503  /* Issue the error about the overly-qualified name now.  */
13504  if (qualified_p)
13505    cp_parser_error (parser,
13506		     "global qualification of class name is invalid");
13507  else if (invalid_nested_name_p)
13508    cp_parser_error (parser,
13509		     "qualified name does not name a class");
13510  else if (nested_name_specifier)
13511    {
13512      tree scope;
13513
13514      /* Reject typedef-names in class heads.  */
13515      if (!DECL_IMPLICIT_TYPEDEF_P (type))
13516	{
13517	  error ("invalid class name in declaration of %qD", type);
13518	  type = NULL_TREE;
13519	  goto done;
13520	}
13521
13522      /* Figure out in what scope the declaration is being placed.  */
13523      scope = current_scope ();
13524      /* If that scope does not contain the scope in which the
13525	 class was originally declared, the program is invalid.  */
13526      if (scope && !is_ancestor (scope, nested_name_specifier))
13527	{
13528	  error ("declaration of %qD in %qD which does not enclose %qD",
13529		 type, scope, nested_name_specifier);
13530	  type = NULL_TREE;
13531	  goto done;
13532	}
13533      /* [dcl.meaning]
13534
13535	 A declarator-id shall not be qualified exception of the
13536	 definition of a ... nested class outside of its class
13537	 ... [or] a the definition or explicit instantiation of a
13538	 class member of a namespace outside of its namespace.  */
13539      if (scope == nested_name_specifier)
13540	{
13541	  pedwarn ("extra qualification ignored");
13542	  nested_name_specifier = NULL_TREE;
13543	  num_templates = 0;
13544	}
13545    }
13546  /* An explicit-specialization must be preceded by "template <>".  If
13547     it is not, try to recover gracefully.  */
13548  if (at_namespace_scope_p ()
13549      && parser->num_template_parameter_lists == 0
13550      && template_id_p)
13551    {
13552      error ("an explicit specialization must be preceded by %<template <>%>");
13553      invalid_explicit_specialization_p = true;
13554      /* Take the same action that would have been taken by
13555	 cp_parser_explicit_specialization.  */
13556      ++parser->num_template_parameter_lists;
13557      begin_specialization ();
13558    }
13559  /* There must be no "return" statements between this point and the
13560     end of this function; set "type "to the correct return value and
13561     use "goto done;" to return.  */
13562  /* Make sure that the right number of template parameters were
13563     present.  */
13564  if (!cp_parser_check_template_parameters (parser, num_templates))
13565    {
13566      /* If something went wrong, there is no point in even trying to
13567	 process the class-definition.  */
13568      type = NULL_TREE;
13569      goto done;
13570    }
13571
13572  /* Look up the type.  */
13573  if (template_id_p)
13574    {
13575      type = TREE_TYPE (id);
13576      type = maybe_process_partial_specialization (type);
13577      if (nested_name_specifier)
13578	pushed_scope = push_scope (nested_name_specifier);
13579    }
13580  else if (nested_name_specifier)
13581    {
13582      tree class_type;
13583
13584      /* Given:
13585
13586	    template <typename T> struct S { struct T };
13587	    template <typename T> struct S<T>::T { };
13588
13589	 we will get a TYPENAME_TYPE when processing the definition of
13590	 `S::T'.  We need to resolve it to the actual type before we
13591	 try to define it.  */
13592      if (TREE_CODE (TREE_TYPE (type)) == TYPENAME_TYPE)
13593	{
13594	  class_type = resolve_typename_type (TREE_TYPE (type),
13595					      /*only_current_p=*/false);
13596	  if (class_type != error_mark_node)
13597	    type = TYPE_NAME (class_type);
13598	  else
13599	    {
13600	      cp_parser_error (parser, "could not resolve typename type");
13601	      type = error_mark_node;
13602	    }
13603	}
13604
13605      maybe_process_partial_specialization (TREE_TYPE (type));
13606      class_type = current_class_type;
13607      /* Enter the scope indicated by the nested-name-specifier.  */
13608      pushed_scope = push_scope (nested_name_specifier);
13609      /* Get the canonical version of this type.  */
13610      type = TYPE_MAIN_DECL (TREE_TYPE (type));
13611      if (PROCESSING_REAL_TEMPLATE_DECL_P ()
13612	  && !CLASSTYPE_TEMPLATE_SPECIALIZATION (TREE_TYPE (type)))
13613	{
13614	  type = push_template_decl (type);
13615	  if (type == error_mark_node)
13616	    {
13617	      type = NULL_TREE;
13618	      goto done;
13619	    }
13620	}
13621
13622      type = TREE_TYPE (type);
13623      *nested_name_specifier_p = true;
13624    }
13625  else      /* The name is not a nested name.  */
13626    {
13627      /* If the class was unnamed, create a dummy name.  */
13628      if (!id)
13629	id = make_anon_name ();
13630      type = xref_tag (class_key, id, /*tag_scope=*/ts_current,
13631		       parser->num_template_parameter_lists);
13632    }
13633
13634  /* Indicate whether this class was declared as a `class' or as a
13635     `struct'.  */
13636  if (TREE_CODE (type) == RECORD_TYPE)
13637    CLASSTYPE_DECLARED_CLASS (type) = (class_key == class_type);
13638  cp_parser_check_class_key (class_key, type);
13639
13640  /* If this type was already complete, and we see another definition,
13641     that's an error.  */
13642  if (type != error_mark_node && COMPLETE_TYPE_P (type))
13643    {
13644      error ("redefinition of %q#T", type);
13645      error ("previous definition of %q+#T", type);
13646      type = NULL_TREE;
13647      goto done;
13648    }
13649  else if (type == error_mark_node)
13650    type = NULL_TREE;
13651
13652  /* We will have entered the scope containing the class; the names of
13653     base classes should be looked up in that context.  For example:
13654
13655       struct A { struct B {}; struct C; };
13656       struct A::C : B {};
13657
13658     is valid.  */
13659  *bases = NULL_TREE;
13660
13661  /* Get the list of base-classes, if there is one.  */
13662  if (cp_lexer_next_token_is (parser->lexer, CPP_COLON))
13663    *bases = cp_parser_base_clause (parser);
13664
13665 done:
13666  /* Leave the scope given by the nested-name-specifier.  We will
13667     enter the class scope itself while processing the members.  */
13668  if (pushed_scope)
13669    pop_scope (pushed_scope);
13670
13671  if (invalid_explicit_specialization_p)
13672    {
13673      end_specialization ();
13674      --parser->num_template_parameter_lists;
13675    }
13676  *attributes_p = attributes;
13677  return type;
13678}
13679
13680/* Parse a class-key.
13681
13682   class-key:
13683     class
13684     struct
13685     union
13686
13687   Returns the kind of class-key specified, or none_type to indicate
13688   error.  */
13689
13690static enum tag_types
13691cp_parser_class_key (cp_parser* parser)
13692{
13693  cp_token *token;
13694  enum tag_types tag_type;
13695
13696  /* Look for the class-key.  */
13697  token = cp_parser_require (parser, CPP_KEYWORD, "class-key");
13698  if (!token)
13699    return none_type;
13700
13701  /* Check to see if the TOKEN is a class-key.  */
13702  tag_type = cp_parser_token_is_class_key (token);
13703  if (!tag_type)
13704    cp_parser_error (parser, "expected class-key");
13705  return tag_type;
13706}
13707
13708/* Parse an (optional) member-specification.
13709
13710   member-specification:
13711     member-declaration member-specification [opt]
13712     access-specifier : member-specification [opt]  */
13713
13714static void
13715cp_parser_member_specification_opt (cp_parser* parser)
13716{
13717  while (true)
13718    {
13719      cp_token *token;
13720      enum rid keyword;
13721
13722      /* Peek at the next token.  */
13723      token = cp_lexer_peek_token (parser->lexer);
13724      /* If it's a `}', or EOF then we've seen all the members.  */
13725      if (token->type == CPP_CLOSE_BRACE
13726	  || token->type == CPP_EOF
13727	  || token->type == CPP_PRAGMA_EOL)
13728	break;
13729
13730      /* See if this token is a keyword.  */
13731      keyword = token->keyword;
13732      switch (keyword)
13733	{
13734	case RID_PUBLIC:
13735	case RID_PROTECTED:
13736	case RID_PRIVATE:
13737	  /* Consume the access-specifier.  */
13738	  cp_lexer_consume_token (parser->lexer);
13739	  /* Remember which access-specifier is active.  */
13740	  current_access_specifier = token->u.value;
13741	  /* Look for the `:'.  */
13742	  cp_parser_require (parser, CPP_COLON, "`:'");
13743	  break;
13744
13745	default:
13746	  /* Accept #pragmas at class scope.  */
13747	  if (token->type == CPP_PRAGMA)
13748	    {
13749	      cp_parser_pragma (parser, pragma_external);
13750	      break;
13751	    }
13752
13753	  /* Otherwise, the next construction must be a
13754	     member-declaration.  */
13755	  cp_parser_member_declaration (parser);
13756	}
13757    }
13758}
13759
13760/* Parse a member-declaration.
13761
13762   member-declaration:
13763     decl-specifier-seq [opt] member-declarator-list [opt] ;
13764     function-definition ; [opt]
13765     :: [opt] nested-name-specifier template [opt] unqualified-id ;
13766     using-declaration
13767     template-declaration
13768
13769   member-declarator-list:
13770     member-declarator
13771     member-declarator-list , member-declarator
13772
13773   member-declarator:
13774     declarator pure-specifier [opt]
13775     declarator constant-initializer [opt]
13776     identifier [opt] : constant-expression
13777
13778   GNU Extensions:
13779
13780   member-declaration:
13781     __extension__ member-declaration
13782
13783   member-declarator:
13784     declarator attributes [opt] pure-specifier [opt]
13785     declarator attributes [opt] constant-initializer [opt]
13786     identifier [opt] attributes [opt] : constant-expression  */
13787
13788static void
13789cp_parser_member_declaration (cp_parser* parser)
13790{
13791  cp_decl_specifier_seq decl_specifiers;
13792  tree prefix_attributes;
13793  tree decl;
13794  int declares_class_or_enum;
13795  bool friend_p;
13796  cp_token *token;
13797  int saved_pedantic;
13798
13799  /* Check for the `__extension__' keyword.  */
13800  if (cp_parser_extension_opt (parser, &saved_pedantic))
13801    {
13802      /* Recurse.  */
13803      cp_parser_member_declaration (parser);
13804      /* Restore the old value of the PEDANTIC flag.  */
13805      pedantic = saved_pedantic;
13806
13807      return;
13808    }
13809
13810  /* Check for a template-declaration.  */
13811  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
13812    {
13813      /* An explicit specialization here is an error condition, and we
13814	 expect the specialization handler to detect and report this.  */
13815      if (cp_lexer_peek_nth_token (parser->lexer, 2)->type == CPP_LESS
13816	  && cp_lexer_peek_nth_token (parser->lexer, 3)->type == CPP_GREATER)
13817	cp_parser_explicit_specialization (parser);
13818      else
13819	cp_parser_template_declaration (parser, /*member_p=*/true);
13820
13821      return;
13822    }
13823
13824  /* Check for a using-declaration.  */
13825  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_USING))
13826    {
13827      /* Parse the using-declaration.  */
13828      cp_parser_using_declaration (parser,
13829				   /*access_declaration_p=*/false);
13830      return;
13831    }
13832
13833  /* Check for @defs.  */
13834  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_DEFS))
13835    {
13836      tree ivar, member;
13837      tree ivar_chains = cp_parser_objc_defs_expression (parser);
13838      ivar = ivar_chains;
13839      while (ivar)
13840	{
13841	  member = ivar;
13842	  ivar = TREE_CHAIN (member);
13843	  TREE_CHAIN (member) = NULL_TREE;
13844	  finish_member_declaration (member);
13845	}
13846      return;
13847    }
13848
13849  if (cp_parser_using_declaration (parser, /*access_declaration=*/true))
13850    return;
13851
13852  /* Parse the decl-specifier-seq.  */
13853  cp_parser_decl_specifier_seq (parser,
13854				CP_PARSER_FLAGS_OPTIONAL,
13855				&decl_specifiers,
13856				&declares_class_or_enum);
13857  prefix_attributes = decl_specifiers.attributes;
13858  decl_specifiers.attributes = NULL_TREE;
13859  /* Check for an invalid type-name.  */
13860  if (!decl_specifiers.type
13861      && cp_parser_parse_and_diagnose_invalid_type_name (parser))
13862    return;
13863  /* If there is no declarator, then the decl-specifier-seq should
13864     specify a type.  */
13865  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
13866    {
13867      /* If there was no decl-specifier-seq, and the next token is a
13868	 `;', then we have something like:
13869
13870	   struct S { ; };
13871
13872	 [class.mem]
13873
13874	 Each member-declaration shall declare at least one member
13875	 name of the class.  */
13876      if (!decl_specifiers.any_specifiers_p)
13877	{
13878	  cp_token *token = cp_lexer_peek_token (parser->lexer);
13879	  if (pedantic && !token->in_system_header)
13880	    pedwarn ("%Hextra %<;%>", &token->location);
13881	}
13882      else
13883	{
13884	  tree type;
13885
13886	  /* See if this declaration is a friend.  */
13887	  friend_p = cp_parser_friend_p (&decl_specifiers);
13888	  /* If there were decl-specifiers, check to see if there was
13889	     a class-declaration.  */
13890	  type = check_tag_decl (&decl_specifiers);
13891	  /* Nested classes have already been added to the class, but
13892	     a `friend' needs to be explicitly registered.  */
13893	  if (friend_p)
13894	    {
13895	      /* If the `friend' keyword was present, the friend must
13896		 be introduced with a class-key.  */
13897	       if (!declares_class_or_enum)
13898		 error ("a class-key must be used when declaring a friend");
13899	       /* In this case:
13900
13901		    template <typename T> struct A {
13902		      friend struct A<T>::B;
13903		    };
13904
13905		  A<T>::B will be represented by a TYPENAME_TYPE, and
13906		  therefore not recognized by check_tag_decl.  */
13907	       if (!type
13908		   && decl_specifiers.type
13909		   && TYPE_P (decl_specifiers.type))
13910		 type = decl_specifiers.type;
13911	       if (!type || !TYPE_P (type))
13912		 error ("friend declaration does not name a class or "
13913			"function");
13914	       else
13915		 make_friend_class (current_class_type, type,
13916				    /*complain=*/true);
13917	    }
13918	  /* If there is no TYPE, an error message will already have
13919	     been issued.  */
13920	  else if (!type || type == error_mark_node)
13921	    ;
13922	  /* An anonymous aggregate has to be handled specially; such
13923	     a declaration really declares a data member (with a
13924	     particular type), as opposed to a nested class.  */
13925	  else if (ANON_AGGR_TYPE_P (type))
13926	    {
13927	      /* Remove constructors and such from TYPE, now that we
13928		 know it is an anonymous aggregate.  */
13929	      fixup_anonymous_aggr (type);
13930	      /* And make the corresponding data member.  */
13931	      decl = build_decl (FIELD_DECL, NULL_TREE, type);
13932	      /* Add it to the class.  */
13933	      finish_member_declaration (decl);
13934	    }
13935	  else
13936	    cp_parser_check_access_in_redeclaration (TYPE_NAME (type));
13937	}
13938    }
13939  else
13940    {
13941      /* See if these declarations will be friends.  */
13942      friend_p = cp_parser_friend_p (&decl_specifiers);
13943
13944      /* Keep going until we hit the `;' at the end of the
13945	 declaration.  */
13946      while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
13947	{
13948	  tree attributes = NULL_TREE;
13949	  tree first_attribute;
13950
13951	  /* Peek at the next token.  */
13952	  token = cp_lexer_peek_token (parser->lexer);
13953
13954	  /* Check for a bitfield declaration.  */
13955	  if (token->type == CPP_COLON
13956	      || (token->type == CPP_NAME
13957		  && cp_lexer_peek_nth_token (parser->lexer, 2)->type
13958		  == CPP_COLON))
13959	    {
13960	      tree identifier;
13961	      tree width;
13962
13963	      /* Get the name of the bitfield.  Note that we cannot just
13964		 check TOKEN here because it may have been invalidated by
13965		 the call to cp_lexer_peek_nth_token above.  */
13966	      if (cp_lexer_peek_token (parser->lexer)->type != CPP_COLON)
13967		identifier = cp_parser_identifier (parser);
13968	      else
13969		identifier = NULL_TREE;
13970
13971	      /* Consume the `:' token.  */
13972	      cp_lexer_consume_token (parser->lexer);
13973	      /* Get the width of the bitfield.  */
13974	      width
13975		= cp_parser_constant_expression (parser,
13976						 /*allow_non_constant=*/false,
13977						 NULL);
13978
13979	      /* Look for attributes that apply to the bitfield.  */
13980	      attributes = cp_parser_attributes_opt (parser);
13981	      /* Remember which attributes are prefix attributes and
13982		 which are not.  */
13983	      first_attribute = attributes;
13984	      /* Combine the attributes.  */
13985	      attributes = chainon (prefix_attributes, attributes);
13986
13987	      /* Create the bitfield declaration.  */
13988	      decl = grokbitfield (identifier
13989				   ? make_id_declarator (NULL_TREE,
13990							 identifier,
13991							 sfk_none)
13992				   : NULL,
13993				   &decl_specifiers,
13994				   width);
13995	      /* Apply the attributes.  */
13996	      cplus_decl_attributes (&decl, attributes, /*flags=*/0);
13997	    }
13998	  else
13999	    {
14000	      cp_declarator *declarator;
14001	      tree initializer;
14002	      tree asm_specification;
14003	      int ctor_dtor_or_conv_p;
14004
14005	      /* Parse the declarator.  */
14006	      declarator
14007		= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
14008					&ctor_dtor_or_conv_p,
14009					/*parenthesized_p=*/NULL,
14010					/*member_p=*/true);
14011
14012	      /* If something went wrong parsing the declarator, make sure
14013		 that we at least consume some tokens.  */
14014	      if (declarator == cp_error_declarator)
14015		{
14016		  /* Skip to the end of the statement.  */
14017		  cp_parser_skip_to_end_of_statement (parser);
14018		  /* If the next token is not a semicolon, that is
14019		     probably because we just skipped over the body of
14020		     a function.  So, we consume a semicolon if
14021		     present, but do not issue an error message if it
14022		     is not present.  */
14023		  if (cp_lexer_next_token_is (parser->lexer,
14024					      CPP_SEMICOLON))
14025		    cp_lexer_consume_token (parser->lexer);
14026		  return;
14027		}
14028
14029	      if (declares_class_or_enum & 2)
14030		cp_parser_check_for_definition_in_return_type
14031		  (declarator, decl_specifiers.type);
14032
14033	      /* Look for an asm-specification.  */
14034	      asm_specification = cp_parser_asm_specification_opt (parser);
14035	      /* Look for attributes that apply to the declaration.  */
14036	      attributes = cp_parser_attributes_opt (parser);
14037	      /* Remember which attributes are prefix attributes and
14038		 which are not.  */
14039	      first_attribute = attributes;
14040	      /* Combine the attributes.  */
14041	      attributes = chainon (prefix_attributes, attributes);
14042
14043	      /* If it's an `=', then we have a constant-initializer or a
14044		 pure-specifier.  It is not correct to parse the
14045		 initializer before registering the member declaration
14046		 since the member declaration should be in scope while
14047		 its initializer is processed.  However, the rest of the
14048		 front end does not yet provide an interface that allows
14049		 us to handle this correctly.  */
14050	      if (cp_lexer_next_token_is (parser->lexer, CPP_EQ))
14051		{
14052		  /* In [class.mem]:
14053
14054		     A pure-specifier shall be used only in the declaration of
14055		     a virtual function.
14056
14057		     A member-declarator can contain a constant-initializer
14058		     only if it declares a static member of integral or
14059		     enumeration type.
14060
14061		     Therefore, if the DECLARATOR is for a function, we look
14062		     for a pure-specifier; otherwise, we look for a
14063		     constant-initializer.  When we call `grokfield', it will
14064		     perform more stringent semantics checks.  */
14065		  if (function_declarator_p (declarator))
14066		    initializer = cp_parser_pure_specifier (parser);
14067		  else
14068		    /* Parse the initializer.  */
14069		    initializer = cp_parser_constant_initializer (parser);
14070		}
14071	      /* Otherwise, there is no initializer.  */
14072	      else
14073		initializer = NULL_TREE;
14074
14075	      /* See if we are probably looking at a function
14076		 definition.  We are certainly not looking at a
14077		 member-declarator.  Calling `grokfield' has
14078		 side-effects, so we must not do it unless we are sure
14079		 that we are looking at a member-declarator.  */
14080	      if (cp_parser_token_starts_function_definition_p
14081		  (cp_lexer_peek_token (parser->lexer)))
14082		{
14083		  /* The grammar does not allow a pure-specifier to be
14084		     used when a member function is defined.  (It is
14085		     possible that this fact is an oversight in the
14086		     standard, since a pure function may be defined
14087		     outside of the class-specifier.  */
14088		  if (initializer)
14089		    error ("pure-specifier on function-definition");
14090		  decl = cp_parser_save_member_function_body (parser,
14091							      &decl_specifiers,
14092							      declarator,
14093							      attributes);
14094		  /* If the member was not a friend, declare it here.  */
14095		  if (!friend_p)
14096		    finish_member_declaration (decl);
14097		  /* Peek at the next token.  */
14098		  token = cp_lexer_peek_token (parser->lexer);
14099		  /* If the next token is a semicolon, consume it.  */
14100		  if (token->type == CPP_SEMICOLON)
14101		    cp_lexer_consume_token (parser->lexer);
14102		  return;
14103		}
14104	      else
14105		/* Create the declaration.  */
14106		decl = grokfield (declarator, &decl_specifiers,
14107				  initializer, /*init_const_expr_p=*/true,
14108				  asm_specification,
14109				  attributes);
14110	    }
14111
14112	  /* Reset PREFIX_ATTRIBUTES.  */
14113	  while (attributes && TREE_CHAIN (attributes) != first_attribute)
14114	    attributes = TREE_CHAIN (attributes);
14115	  if (attributes)
14116	    TREE_CHAIN (attributes) = NULL_TREE;
14117
14118	  /* If there is any qualification still in effect, clear it
14119	     now; we will be starting fresh with the next declarator.  */
14120	  parser->scope = NULL_TREE;
14121	  parser->qualifying_scope = NULL_TREE;
14122	  parser->object_scope = NULL_TREE;
14123	  /* If it's a `,', then there are more declarators.  */
14124	  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
14125	    cp_lexer_consume_token (parser->lexer);
14126	  /* If the next token isn't a `;', then we have a parse error.  */
14127	  else if (cp_lexer_next_token_is_not (parser->lexer,
14128					       CPP_SEMICOLON))
14129	    {
14130	      cp_parser_error (parser, "expected %<;%>");
14131	      /* Skip tokens until we find a `;'.  */
14132	      cp_parser_skip_to_end_of_statement (parser);
14133
14134	      break;
14135	    }
14136
14137	  if (decl)
14138	    {
14139	      /* Add DECL to the list of members.  */
14140	      if (!friend_p)
14141		finish_member_declaration (decl);
14142
14143	      if (TREE_CODE (decl) == FUNCTION_DECL)
14144		cp_parser_save_default_args (parser, decl);
14145	    }
14146	}
14147    }
14148
14149  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
14150}
14151
14152/* Parse a pure-specifier.
14153
14154   pure-specifier:
14155     = 0
14156
14157   Returns INTEGER_ZERO_NODE if a pure specifier is found.
14158   Otherwise, ERROR_MARK_NODE is returned.  */
14159
14160static tree
14161cp_parser_pure_specifier (cp_parser* parser)
14162{
14163  cp_token *token;
14164
14165  /* Look for the `=' token.  */
14166  if (!cp_parser_require (parser, CPP_EQ, "`='"))
14167    return error_mark_node;
14168  /* Look for the `0' token.  */
14169  token = cp_lexer_consume_token (parser->lexer);
14170  /* c_lex_with_flags marks a single digit '0' with PURE_ZERO.  */
14171  if (token->type != CPP_NUMBER || !(token->flags & PURE_ZERO))
14172    {
14173      cp_parser_error (parser,
14174		       "invalid pure specifier (only `= 0' is allowed)");
14175      cp_parser_skip_to_end_of_statement (parser);
14176      return error_mark_node;
14177    }
14178  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
14179    {
14180      error ("templates may not be %<virtual%>");
14181      return error_mark_node;
14182    }
14183
14184  return integer_zero_node;
14185}
14186
14187/* Parse a constant-initializer.
14188
14189   constant-initializer:
14190     = constant-expression
14191
14192   Returns a representation of the constant-expression.  */
14193
14194static tree
14195cp_parser_constant_initializer (cp_parser* parser)
14196{
14197  /* Look for the `=' token.  */
14198  if (!cp_parser_require (parser, CPP_EQ, "`='"))
14199    return error_mark_node;
14200
14201  /* It is invalid to write:
14202
14203       struct S { static const int i = { 7 }; };
14204
14205     */
14206  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE))
14207    {
14208      cp_parser_error (parser,
14209		       "a brace-enclosed initializer is not allowed here");
14210      /* Consume the opening brace.  */
14211      cp_lexer_consume_token (parser->lexer);
14212      /* Skip the initializer.  */
14213      cp_parser_skip_to_closing_brace (parser);
14214      /* Look for the trailing `}'.  */
14215      cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
14216
14217      return error_mark_node;
14218    }
14219
14220  return cp_parser_constant_expression (parser,
14221					/*allow_non_constant=*/false,
14222					NULL);
14223}
14224
14225/* Derived classes [gram.class.derived] */
14226
14227/* Parse a base-clause.
14228
14229   base-clause:
14230     : base-specifier-list
14231
14232   base-specifier-list:
14233     base-specifier
14234     base-specifier-list , base-specifier
14235
14236   Returns a TREE_LIST representing the base-classes, in the order in
14237   which they were declared.  The representation of each node is as
14238   described by cp_parser_base_specifier.
14239
14240   In the case that no bases are specified, this function will return
14241   NULL_TREE, not ERROR_MARK_NODE.  */
14242
14243static tree
14244cp_parser_base_clause (cp_parser* parser)
14245{
14246  tree bases = NULL_TREE;
14247
14248  /* Look for the `:' that begins the list.  */
14249  cp_parser_require (parser, CPP_COLON, "`:'");
14250
14251  /* Scan the base-specifier-list.  */
14252  while (true)
14253    {
14254      cp_token *token;
14255      tree base;
14256
14257      /* Look for the base-specifier.  */
14258      base = cp_parser_base_specifier (parser);
14259      /* Add BASE to the front of the list.  */
14260      if (base != error_mark_node)
14261	{
14262	  TREE_CHAIN (base) = bases;
14263	  bases = base;
14264	}
14265      /* Peek at the next token.  */
14266      token = cp_lexer_peek_token (parser->lexer);
14267      /* If it's not a comma, then the list is complete.  */
14268      if (token->type != CPP_COMMA)
14269	break;
14270      /* Consume the `,'.  */
14271      cp_lexer_consume_token (parser->lexer);
14272    }
14273
14274  /* PARSER->SCOPE may still be non-NULL at this point, if the last
14275     base class had a qualified name.  However, the next name that
14276     appears is certainly not qualified.  */
14277  parser->scope = NULL_TREE;
14278  parser->qualifying_scope = NULL_TREE;
14279  parser->object_scope = NULL_TREE;
14280
14281  return nreverse (bases);
14282}
14283
14284/* Parse a base-specifier.
14285
14286   base-specifier:
14287     :: [opt] nested-name-specifier [opt] class-name
14288     virtual access-specifier [opt] :: [opt] nested-name-specifier
14289       [opt] class-name
14290     access-specifier virtual [opt] :: [opt] nested-name-specifier
14291       [opt] class-name
14292
14293   Returns a TREE_LIST.  The TREE_PURPOSE will be one of
14294   ACCESS_{DEFAULT,PUBLIC,PROTECTED,PRIVATE}_[VIRTUAL]_NODE to
14295   indicate the specifiers provided.  The TREE_VALUE will be a TYPE
14296   (or the ERROR_MARK_NODE) indicating the type that was specified.  */
14297
14298static tree
14299cp_parser_base_specifier (cp_parser* parser)
14300{
14301  cp_token *token;
14302  bool done = false;
14303  bool virtual_p = false;
14304  bool duplicate_virtual_error_issued_p = false;
14305  bool duplicate_access_error_issued_p = false;
14306  bool class_scope_p, template_p;
14307  tree access = access_default_node;
14308  tree type;
14309
14310  /* Process the optional `virtual' and `access-specifier'.  */
14311  while (!done)
14312    {
14313      /* Peek at the next token.  */
14314      token = cp_lexer_peek_token (parser->lexer);
14315      /* Process `virtual'.  */
14316      switch (token->keyword)
14317	{
14318	case RID_VIRTUAL:
14319	  /* If `virtual' appears more than once, issue an error.  */
14320	  if (virtual_p && !duplicate_virtual_error_issued_p)
14321	    {
14322	      cp_parser_error (parser,
14323			       "%<virtual%> specified more than once in base-specified");
14324	      duplicate_virtual_error_issued_p = true;
14325	    }
14326
14327	  virtual_p = true;
14328
14329	  /* Consume the `virtual' token.  */
14330	  cp_lexer_consume_token (parser->lexer);
14331
14332	  break;
14333
14334	case RID_PUBLIC:
14335	case RID_PROTECTED:
14336	case RID_PRIVATE:
14337	  /* If more than one access specifier appears, issue an
14338	     error.  */
14339	  if (access != access_default_node
14340	      && !duplicate_access_error_issued_p)
14341	    {
14342	      cp_parser_error (parser,
14343			       "more than one access specifier in base-specified");
14344	      duplicate_access_error_issued_p = true;
14345	    }
14346
14347	  access = ridpointers[(int) token->keyword];
14348
14349	  /* Consume the access-specifier.  */
14350	  cp_lexer_consume_token (parser->lexer);
14351
14352	  break;
14353
14354	default:
14355	  done = true;
14356	  break;
14357	}
14358    }
14359  /* It is not uncommon to see programs mechanically, erroneously, use
14360     the 'typename' keyword to denote (dependent) qualified types
14361     as base classes.  */
14362  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TYPENAME))
14363    {
14364      if (!processing_template_decl)
14365	error ("keyword %<typename%> not allowed outside of templates");
14366      else
14367	error ("keyword %<typename%> not allowed in this context "
14368	       "(the base class is implicitly a type)");
14369      cp_lexer_consume_token (parser->lexer);
14370    }
14371
14372  /* Look for the optional `::' operator.  */
14373  cp_parser_global_scope_opt (parser, /*current_scope_valid_p=*/false);
14374  /* Look for the nested-name-specifier.  The simplest way to
14375     implement:
14376
14377       [temp.res]
14378
14379       The keyword `typename' is not permitted in a base-specifier or
14380       mem-initializer; in these contexts a qualified name that
14381       depends on a template-parameter is implicitly assumed to be a
14382       type name.
14383
14384     is to pretend that we have seen the `typename' keyword at this
14385     point.  */
14386  cp_parser_nested_name_specifier_opt (parser,
14387				       /*typename_keyword_p=*/true,
14388				       /*check_dependency_p=*/true,
14389				       typename_type,
14390				       /*is_declaration=*/true);
14391  /* If the base class is given by a qualified name, assume that names
14392     we see are type names or templates, as appropriate.  */
14393  class_scope_p = (parser->scope && TYPE_P (parser->scope));
14394  template_p = class_scope_p && cp_parser_optional_template_keyword (parser);
14395
14396  /* Finally, look for the class-name.  */
14397  type = cp_parser_class_name (parser,
14398			       class_scope_p,
14399			       template_p,
14400			       typename_type,
14401			       /*check_dependency_p=*/true,
14402			       /*class_head_p=*/false,
14403			       /*is_declaration=*/true);
14404
14405  if (type == error_mark_node)
14406    return error_mark_node;
14407
14408  return finish_base_specifier (TREE_TYPE (type), access, virtual_p);
14409}
14410
14411/* Exception handling [gram.exception] */
14412
14413/* Parse an (optional) exception-specification.
14414
14415   exception-specification:
14416     throw ( type-id-list [opt] )
14417
14418   Returns a TREE_LIST representing the exception-specification.  The
14419   TREE_VALUE of each node is a type.  */
14420
14421static tree
14422cp_parser_exception_specification_opt (cp_parser* parser)
14423{
14424  cp_token *token;
14425  tree type_id_list;
14426
14427  /* Peek at the next token.  */
14428  token = cp_lexer_peek_token (parser->lexer);
14429  /* If it's not `throw', then there's no exception-specification.  */
14430  if (!cp_parser_is_keyword (token, RID_THROW))
14431    return NULL_TREE;
14432
14433  /* Consume the `throw'.  */
14434  cp_lexer_consume_token (parser->lexer);
14435
14436  /* Look for the `('.  */
14437  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14438
14439  /* Peek at the next token.  */
14440  token = cp_lexer_peek_token (parser->lexer);
14441  /* If it's not a `)', then there is a type-id-list.  */
14442  if (token->type != CPP_CLOSE_PAREN)
14443    {
14444      const char *saved_message;
14445
14446      /* Types may not be defined in an exception-specification.  */
14447      saved_message = parser->type_definition_forbidden_message;
14448      parser->type_definition_forbidden_message
14449	= "types may not be defined in an exception-specification";
14450      /* Parse the type-id-list.  */
14451      type_id_list = cp_parser_type_id_list (parser);
14452      /* Restore the saved message.  */
14453      parser->type_definition_forbidden_message = saved_message;
14454    }
14455  else
14456    type_id_list = empty_except_spec;
14457
14458  /* Look for the `)'.  */
14459  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14460
14461  return type_id_list;
14462}
14463
14464/* Parse an (optional) type-id-list.
14465
14466   type-id-list:
14467     type-id
14468     type-id-list , type-id
14469
14470   Returns a TREE_LIST.  The TREE_VALUE of each node is a TYPE,
14471   in the order that the types were presented.  */
14472
14473static tree
14474cp_parser_type_id_list (cp_parser* parser)
14475{
14476  tree types = NULL_TREE;
14477
14478  while (true)
14479    {
14480      cp_token *token;
14481      tree type;
14482
14483      /* Get the next type-id.  */
14484      type = cp_parser_type_id (parser);
14485      /* Add it to the list.  */
14486      types = add_exception_specifier (types, type, /*complain=*/1);
14487      /* Peek at the next token.  */
14488      token = cp_lexer_peek_token (parser->lexer);
14489      /* If it is not a `,', we are done.  */
14490      if (token->type != CPP_COMMA)
14491	break;
14492      /* Consume the `,'.  */
14493      cp_lexer_consume_token (parser->lexer);
14494    }
14495
14496  return nreverse (types);
14497}
14498
14499/* Parse a try-block.
14500
14501   try-block:
14502     try compound-statement handler-seq  */
14503
14504static tree
14505cp_parser_try_block (cp_parser* parser)
14506{
14507  tree try_block;
14508
14509  cp_parser_require_keyword (parser, RID_TRY, "`try'");
14510  try_block = begin_try_block ();
14511  cp_parser_compound_statement (parser, NULL, true);
14512  finish_try_block (try_block);
14513  cp_parser_handler_seq (parser);
14514  finish_handler_sequence (try_block);
14515
14516  return try_block;
14517}
14518
14519/* Parse a function-try-block.
14520
14521   function-try-block:
14522     try ctor-initializer [opt] function-body handler-seq  */
14523
14524static bool
14525cp_parser_function_try_block (cp_parser* parser)
14526{
14527  tree compound_stmt;
14528  tree try_block;
14529  bool ctor_initializer_p;
14530
14531  /* Look for the `try' keyword.  */
14532  if (!cp_parser_require_keyword (parser, RID_TRY, "`try'"))
14533    return false;
14534  /* Let the rest of the front-end know where we are.  */
14535  try_block = begin_function_try_block (&compound_stmt);
14536  /* Parse the function-body.  */
14537  ctor_initializer_p
14538    = cp_parser_ctor_initializer_opt_and_function_body (parser);
14539  /* We're done with the `try' part.  */
14540  finish_function_try_block (try_block);
14541  /* Parse the handlers.  */
14542  cp_parser_handler_seq (parser);
14543  /* We're done with the handlers.  */
14544  finish_function_handler_sequence (try_block, compound_stmt);
14545
14546  return ctor_initializer_p;
14547}
14548
14549/* Parse a handler-seq.
14550
14551   handler-seq:
14552     handler handler-seq [opt]  */
14553
14554static void
14555cp_parser_handler_seq (cp_parser* parser)
14556{
14557  while (true)
14558    {
14559      cp_token *token;
14560
14561      /* Parse the handler.  */
14562      cp_parser_handler (parser);
14563      /* Peek at the next token.  */
14564      token = cp_lexer_peek_token (parser->lexer);
14565      /* If it's not `catch' then there are no more handlers.  */
14566      if (!cp_parser_is_keyword (token, RID_CATCH))
14567	break;
14568    }
14569}
14570
14571/* Parse a handler.
14572
14573   handler:
14574     catch ( exception-declaration ) compound-statement  */
14575
14576static void
14577cp_parser_handler (cp_parser* parser)
14578{
14579  tree handler;
14580  tree declaration;
14581
14582  cp_parser_require_keyword (parser, RID_CATCH, "`catch'");
14583  handler = begin_handler ();
14584  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14585  declaration = cp_parser_exception_declaration (parser);
14586  finish_handler_parms (declaration, handler);
14587  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14588  cp_parser_compound_statement (parser, NULL, false);
14589  finish_handler (handler);
14590}
14591
14592/* Parse an exception-declaration.
14593
14594   exception-declaration:
14595     type-specifier-seq declarator
14596     type-specifier-seq abstract-declarator
14597     type-specifier-seq
14598     ...
14599
14600   Returns a VAR_DECL for the declaration, or NULL_TREE if the
14601   ellipsis variant is used.  */
14602
14603static tree
14604cp_parser_exception_declaration (cp_parser* parser)
14605{
14606  cp_decl_specifier_seq type_specifiers;
14607  cp_declarator *declarator;
14608  const char *saved_message;
14609
14610  /* If it's an ellipsis, it's easy to handle.  */
14611  if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS))
14612    {
14613      /* Consume the `...' token.  */
14614      cp_lexer_consume_token (parser->lexer);
14615      return NULL_TREE;
14616    }
14617
14618  /* Types may not be defined in exception-declarations.  */
14619  saved_message = parser->type_definition_forbidden_message;
14620  parser->type_definition_forbidden_message
14621    = "types may not be defined in exception-declarations";
14622
14623  /* Parse the type-specifier-seq.  */
14624  cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
14625				&type_specifiers);
14626  /* If it's a `)', then there is no declarator.  */
14627  if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_PAREN))
14628    declarator = NULL;
14629  else
14630    declarator = cp_parser_declarator (parser, CP_PARSER_DECLARATOR_EITHER,
14631				       /*ctor_dtor_or_conv_p=*/NULL,
14632				       /*parenthesized_p=*/NULL,
14633				       /*member_p=*/false);
14634
14635  /* Restore the saved message.  */
14636  parser->type_definition_forbidden_message = saved_message;
14637
14638  if (!type_specifiers.any_specifiers_p)
14639    return error_mark_node;
14640
14641  return grokdeclarator (declarator, &type_specifiers, CATCHPARM, 1, NULL);
14642}
14643
14644/* Parse a throw-expression.
14645
14646   throw-expression:
14647     throw assignment-expression [opt]
14648
14649   Returns a THROW_EXPR representing the throw-expression.  */
14650
14651static tree
14652cp_parser_throw_expression (cp_parser* parser)
14653{
14654  tree expression;
14655  cp_token* token;
14656
14657  cp_parser_require_keyword (parser, RID_THROW, "`throw'");
14658  token = cp_lexer_peek_token (parser->lexer);
14659  /* Figure out whether or not there is an assignment-expression
14660     following the "throw" keyword.  */
14661  if (token->type == CPP_COMMA
14662      || token->type == CPP_SEMICOLON
14663      || token->type == CPP_CLOSE_PAREN
14664      || token->type == CPP_CLOSE_SQUARE
14665      || token->type == CPP_CLOSE_BRACE
14666      || token->type == CPP_COLON)
14667    expression = NULL_TREE;
14668  else
14669    expression = cp_parser_assignment_expression (parser,
14670						  /*cast_p=*/false);
14671
14672  return build_throw (expression);
14673}
14674
14675/* GNU Extensions */
14676
14677/* Parse an (optional) asm-specification.
14678
14679   asm-specification:
14680     asm ( string-literal )
14681
14682   If the asm-specification is present, returns a STRING_CST
14683   corresponding to the string-literal.  Otherwise, returns
14684   NULL_TREE.  */
14685
14686static tree
14687cp_parser_asm_specification_opt (cp_parser* parser)
14688{
14689  cp_token *token;
14690  tree asm_specification;
14691
14692  /* Peek at the next token.  */
14693  token = cp_lexer_peek_token (parser->lexer);
14694  /* If the next token isn't the `asm' keyword, then there's no
14695     asm-specification.  */
14696  if (!cp_parser_is_keyword (token, RID_ASM))
14697    return NULL_TREE;
14698
14699  /* Consume the `asm' token.  */
14700  cp_lexer_consume_token (parser->lexer);
14701  /* Look for the `('.  */
14702  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14703
14704  /* Look for the string-literal.  */
14705  asm_specification = cp_parser_string_literal (parser, false, false);
14706
14707  /* Look for the `)'.  */
14708  cp_parser_require (parser, CPP_CLOSE_PAREN, "`('");
14709
14710  return asm_specification;
14711}
14712
14713/* Parse an asm-operand-list.
14714
14715   asm-operand-list:
14716     asm-operand
14717     asm-operand-list , asm-operand
14718
14719   asm-operand:
14720     string-literal ( expression )
14721     [ string-literal ] string-literal ( expression )
14722
14723   Returns a TREE_LIST representing the operands.  The TREE_VALUE of
14724   each node is the expression.  The TREE_PURPOSE is itself a
14725   TREE_LIST whose TREE_PURPOSE is a STRING_CST for the bracketed
14726   string-literal (or NULL_TREE if not present) and whose TREE_VALUE
14727   is a STRING_CST for the string literal before the parenthesis.  */
14728
14729static tree
14730cp_parser_asm_operand_list (cp_parser* parser)
14731{
14732  tree asm_operands = NULL_TREE;
14733
14734  while (true)
14735    {
14736      tree string_literal;
14737      tree expression;
14738      tree name;
14739
14740      if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_SQUARE))
14741	{
14742	  /* Consume the `[' token.  */
14743	  cp_lexer_consume_token (parser->lexer);
14744	  /* Read the operand name.  */
14745	  name = cp_parser_identifier (parser);
14746	  if (name != error_mark_node)
14747	    name = build_string (IDENTIFIER_LENGTH (name),
14748				 IDENTIFIER_POINTER (name));
14749	  /* Look for the closing `]'.  */
14750	  cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
14751	}
14752      else
14753	name = NULL_TREE;
14754      /* Look for the string-literal.  */
14755      string_literal = cp_parser_string_literal (parser, false, false);
14756
14757      /* Look for the `('.  */
14758      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14759      /* Parse the expression.  */
14760      expression = cp_parser_expression (parser, /*cast_p=*/false);
14761      /* Look for the `)'.  */
14762      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14763
14764      /* Add this operand to the list.  */
14765      asm_operands = tree_cons (build_tree_list (name, string_literal),
14766				expression,
14767				asm_operands);
14768      /* If the next token is not a `,', there are no more
14769	 operands.  */
14770      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14771	break;
14772      /* Consume the `,'.  */
14773      cp_lexer_consume_token (parser->lexer);
14774    }
14775
14776  return nreverse (asm_operands);
14777}
14778
14779/* Parse an asm-clobber-list.
14780
14781   asm-clobber-list:
14782     string-literal
14783     asm-clobber-list , string-literal
14784
14785   Returns a TREE_LIST, indicating the clobbers in the order that they
14786   appeared.  The TREE_VALUE of each node is a STRING_CST.  */
14787
14788static tree
14789cp_parser_asm_clobber_list (cp_parser* parser)
14790{
14791  tree clobbers = NULL_TREE;
14792
14793  while (true)
14794    {
14795      tree string_literal;
14796
14797      /* Look for the string literal.  */
14798      string_literal = cp_parser_string_literal (parser, false, false);
14799      /* Add it to the list.  */
14800      clobbers = tree_cons (NULL_TREE, string_literal, clobbers);
14801      /* If the next token is not a `,', then the list is
14802	 complete.  */
14803      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
14804	break;
14805      /* Consume the `,' token.  */
14806      cp_lexer_consume_token (parser->lexer);
14807    }
14808
14809  return clobbers;
14810}
14811
14812/* Parse an (optional) series of attributes.
14813
14814   attributes:
14815     attributes attribute
14816
14817   attribute:
14818     __attribute__ (( attribute-list [opt] ))
14819
14820   The return value is as for cp_parser_attribute_list.  */
14821
14822static tree
14823cp_parser_attributes_opt (cp_parser* parser)
14824{
14825  tree attributes = NULL_TREE;
14826
14827  while (true)
14828    {
14829      cp_token *token;
14830      tree attribute_list;
14831
14832      /* Peek at the next token.  */
14833      token = cp_lexer_peek_token (parser->lexer);
14834      /* If it's not `__attribute__', then we're done.  */
14835      if (token->keyword != RID_ATTRIBUTE)
14836	break;
14837
14838      /* Consume the `__attribute__' keyword.  */
14839      cp_lexer_consume_token (parser->lexer);
14840      /* Look for the two `(' tokens.  */
14841      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14842      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
14843
14844      /* Peek at the next token.  */
14845      token = cp_lexer_peek_token (parser->lexer);
14846      if (token->type != CPP_CLOSE_PAREN)
14847	/* Parse the attribute-list.  */
14848	attribute_list = cp_parser_attribute_list (parser);
14849      else
14850	/* If the next token is a `)', then there is no attribute
14851	   list.  */
14852	attribute_list = NULL;
14853
14854      /* Look for the two `)' tokens.  */
14855      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14856      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
14857
14858      /* Add these new attributes to the list.  */
14859      attributes = chainon (attributes, attribute_list);
14860    }
14861
14862  return attributes;
14863}
14864
14865/* Parse an attribute-list.
14866
14867   attribute-list:
14868     attribute
14869     attribute-list , attribute
14870
14871   attribute:
14872     identifier
14873     identifier ( identifier )
14874     identifier ( identifier , expression-list )
14875     identifier ( expression-list )
14876
14877   Returns a TREE_LIST, or NULL_TREE on error.  Each node corresponds
14878   to an attribute.  The TREE_PURPOSE of each node is the identifier
14879   indicating which attribute is in use.  The TREE_VALUE represents
14880   the arguments, if any.  */
14881
14882static tree
14883cp_parser_attribute_list (cp_parser* parser)
14884{
14885  tree attribute_list = NULL_TREE;
14886  bool save_translate_strings_p = parser->translate_strings_p;
14887
14888  parser->translate_strings_p = false;
14889  while (true)
14890    {
14891      cp_token *token;
14892      tree identifier;
14893      tree attribute;
14894
14895      /* Look for the identifier.  We also allow keywords here; for
14896	 example `__attribute__ ((const))' is legal.  */
14897      token = cp_lexer_peek_token (parser->lexer);
14898      if (token->type == CPP_NAME
14899	  || token->type == CPP_KEYWORD)
14900	{
14901	  tree arguments = NULL_TREE;
14902
14903	  /* Consume the token.  */
14904	  token = cp_lexer_consume_token (parser->lexer);
14905
14906	  /* Save away the identifier that indicates which attribute
14907	     this is.  */
14908	  identifier = token->u.value;
14909	  attribute = build_tree_list (identifier, NULL_TREE);
14910
14911	  /* Peek at the next token.  */
14912	  token = cp_lexer_peek_token (parser->lexer);
14913	  /* If it's an `(', then parse the attribute arguments.  */
14914	  if (token->type == CPP_OPEN_PAREN)
14915	    {
14916	      arguments = cp_parser_parenthesized_expression_list
14917			  (parser, true, /*cast_p=*/false,
14918			   /*non_constant_p=*/NULL);
14919	      /* Save the arguments away.  */
14920	      TREE_VALUE (attribute) = arguments;
14921	    }
14922
14923	  if (arguments != error_mark_node)
14924	    {
14925	      /* Add this attribute to the list.  */
14926	      TREE_CHAIN (attribute) = attribute_list;
14927	      attribute_list = attribute;
14928	    }
14929
14930	  token = cp_lexer_peek_token (parser->lexer);
14931	}
14932      /* Now, look for more attributes.  If the next token isn't a
14933	 `,', we're done.  */
14934      if (token->type != CPP_COMMA)
14935	break;
14936
14937      /* Consume the comma and keep going.  */
14938      cp_lexer_consume_token (parser->lexer);
14939    }
14940  parser->translate_strings_p = save_translate_strings_p;
14941
14942  /* We built up the list in reverse order.  */
14943  return nreverse (attribute_list);
14944}
14945
14946/* Parse an optional `__extension__' keyword.  Returns TRUE if it is
14947   present, and FALSE otherwise.  *SAVED_PEDANTIC is set to the
14948   current value of the PEDANTIC flag, regardless of whether or not
14949   the `__extension__' keyword is present.  The caller is responsible
14950   for restoring the value of the PEDANTIC flag.  */
14951
14952static bool
14953cp_parser_extension_opt (cp_parser* parser, int* saved_pedantic)
14954{
14955  /* Save the old value of the PEDANTIC flag.  */
14956  *saved_pedantic = pedantic;
14957
14958  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_EXTENSION))
14959    {
14960      /* Consume the `__extension__' token.  */
14961      cp_lexer_consume_token (parser->lexer);
14962      /* We're not being pedantic while the `__extension__' keyword is
14963	 in effect.  */
14964      pedantic = 0;
14965
14966      return true;
14967    }
14968
14969  return false;
14970}
14971
14972/* Parse a label declaration.
14973
14974   label-declaration:
14975     __label__ label-declarator-seq ;
14976
14977   label-declarator-seq:
14978     identifier , label-declarator-seq
14979     identifier  */
14980
14981static void
14982cp_parser_label_declaration (cp_parser* parser)
14983{
14984  /* Look for the `__label__' keyword.  */
14985  cp_parser_require_keyword (parser, RID_LABEL, "`__label__'");
14986
14987  while (true)
14988    {
14989      tree identifier;
14990
14991      /* Look for an identifier.  */
14992      identifier = cp_parser_identifier (parser);
14993      /* If we failed, stop.  */
14994      if (identifier == error_mark_node)
14995	break;
14996      /* Declare it as a label.  */
14997      finish_label_decl (identifier);
14998      /* If the next token is a `;', stop.  */
14999      if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
15000	break;
15001      /* Look for the `,' separating the label declarations.  */
15002      cp_parser_require (parser, CPP_COMMA, "`,'");
15003    }
15004
15005  /* Look for the final `;'.  */
15006  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
15007}
15008
15009/* Support Functions */
15010
15011/* Looks up NAME in the current scope, as given by PARSER->SCOPE.
15012   NAME should have one of the representations used for an
15013   id-expression.  If NAME is the ERROR_MARK_NODE, the ERROR_MARK_NODE
15014   is returned.  If PARSER->SCOPE is a dependent type, then a
15015   SCOPE_REF is returned.
15016
15017   If NAME is a TEMPLATE_ID_EXPR, then it will be immediately
15018   returned; the name was already resolved when the TEMPLATE_ID_EXPR
15019   was formed.  Abstractly, such entities should not be passed to this
15020   function, because they do not need to be looked up, but it is
15021   simpler to check for this special case here, rather than at the
15022   call-sites.
15023
15024   In cases not explicitly covered above, this function returns a
15025   DECL, OVERLOAD, or baselink representing the result of the lookup.
15026   If there was no entity with the indicated NAME, the ERROR_MARK_NODE
15027   is returned.
15028
15029   If TAG_TYPE is not NONE_TYPE, it indicates an explicit type keyword
15030   (e.g., "struct") that was used.  In that case bindings that do not
15031   refer to types are ignored.
15032
15033   If IS_TEMPLATE is TRUE, bindings that do not refer to templates are
15034   ignored.
15035
15036   If IS_NAMESPACE is TRUE, bindings that do not refer to namespaces
15037   are ignored.
15038
15039   If CHECK_DEPENDENCY is TRUE, names are not looked up in dependent
15040   types.
15041
15042   If AMBIGUOUS_DECLS is non-NULL, *AMBIGUOUS_DECLS is set to a
15043   TREE_LIST of candidates if name-lookup results in an ambiguity, and
15044   NULL_TREE otherwise.  */
15045
15046static tree
15047cp_parser_lookup_name (cp_parser *parser, tree name,
15048		       enum tag_types tag_type,
15049		       bool is_template,
15050		       bool is_namespace,
15051		       bool check_dependency,
15052		       tree *ambiguous_decls)
15053{
15054  int flags = 0;
15055  tree decl;
15056  tree object_type = parser->context->object_type;
15057
15058  if (!cp_parser_uncommitted_to_tentative_parse_p (parser))
15059    flags |= LOOKUP_COMPLAIN;
15060
15061  /* Assume that the lookup will be unambiguous.  */
15062  if (ambiguous_decls)
15063    *ambiguous_decls = NULL_TREE;
15064
15065  /* Now that we have looked up the name, the OBJECT_TYPE (if any) is
15066     no longer valid.  Note that if we are parsing tentatively, and
15067     the parse fails, OBJECT_TYPE will be automatically restored.  */
15068  parser->context->object_type = NULL_TREE;
15069
15070  if (name == error_mark_node)
15071    return error_mark_node;
15072
15073  /* A template-id has already been resolved; there is no lookup to
15074     do.  */
15075  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
15076    return name;
15077  if (BASELINK_P (name))
15078    {
15079      gcc_assert (TREE_CODE (BASELINK_FUNCTIONS (name))
15080		  == TEMPLATE_ID_EXPR);
15081      return name;
15082    }
15083
15084  /* A BIT_NOT_EXPR is used to represent a destructor.  By this point,
15085     it should already have been checked to make sure that the name
15086     used matches the type being destroyed.  */
15087  if (TREE_CODE (name) == BIT_NOT_EXPR)
15088    {
15089      tree type;
15090
15091      /* Figure out to which type this destructor applies.  */
15092      if (parser->scope)
15093	type = parser->scope;
15094      else if (object_type)
15095	type = object_type;
15096      else
15097	type = current_class_type;
15098      /* If that's not a class type, there is no destructor.  */
15099      if (!type || !CLASS_TYPE_P (type))
15100	return error_mark_node;
15101      if (CLASSTYPE_LAZY_DESTRUCTOR (type))
15102	lazily_declare_fn (sfk_destructor, type);
15103      if (!CLASSTYPE_DESTRUCTORS (type))
15104	  return error_mark_node;
15105      /* If it was a class type, return the destructor.  */
15106      return CLASSTYPE_DESTRUCTORS (type);
15107    }
15108
15109  /* By this point, the NAME should be an ordinary identifier.  If
15110     the id-expression was a qualified name, the qualifying scope is
15111     stored in PARSER->SCOPE at this point.  */
15112  gcc_assert (TREE_CODE (name) == IDENTIFIER_NODE);
15113
15114  /* Perform the lookup.  */
15115  if (parser->scope)
15116    {
15117      bool dependent_p;
15118
15119      if (parser->scope == error_mark_node)
15120	return error_mark_node;
15121
15122      /* If the SCOPE is dependent, the lookup must be deferred until
15123	 the template is instantiated -- unless we are explicitly
15124	 looking up names in uninstantiated templates.  Even then, we
15125	 cannot look up the name if the scope is not a class type; it
15126	 might, for example, be a template type parameter.  */
15127      dependent_p = (TYPE_P (parser->scope)
15128		     && !(parser->in_declarator_p
15129			  && currently_open_class (parser->scope))
15130		     && dependent_type_p (parser->scope));
15131      if ((check_dependency || !CLASS_TYPE_P (parser->scope))
15132	   && dependent_p)
15133	{
15134	  if (tag_type)
15135	    {
15136	      tree type;
15137
15138	      /* The resolution to Core Issue 180 says that `struct
15139		 A::B' should be considered a type-name, even if `A'
15140		 is dependent.  */
15141	      type = make_typename_type (parser->scope, name, tag_type,
15142					 /*complain=*/tf_error);
15143	      decl = TYPE_NAME (type);
15144	    }
15145	  else if (is_template
15146		   && (cp_parser_next_token_ends_template_argument_p (parser)
15147		       || cp_lexer_next_token_is (parser->lexer,
15148						  CPP_CLOSE_PAREN)))
15149	    decl = make_unbound_class_template (parser->scope,
15150						name, NULL_TREE,
15151						/*complain=*/tf_error);
15152	  else
15153	    decl = build_qualified_name (/*type=*/NULL_TREE,
15154					 parser->scope, name,
15155					 is_template);
15156	}
15157      else
15158	{
15159	  tree pushed_scope = NULL_TREE;
15160
15161	  /* If PARSER->SCOPE is a dependent type, then it must be a
15162	     class type, and we must not be checking dependencies;
15163	     otherwise, we would have processed this lookup above.  So
15164	     that PARSER->SCOPE is not considered a dependent base by
15165	     lookup_member, we must enter the scope here.  */
15166	  if (dependent_p)
15167	    pushed_scope = push_scope (parser->scope);
15168	  /* If the PARSER->SCOPE is a template specialization, it
15169	     may be instantiated during name lookup.  In that case,
15170	     errors may be issued.  Even if we rollback the current
15171	     tentative parse, those errors are valid.  */
15172	  decl = lookup_qualified_name (parser->scope, name,
15173					tag_type != none_type,
15174					/*complain=*/true);
15175	  if (pushed_scope)
15176	    pop_scope (pushed_scope);
15177	}
15178      parser->qualifying_scope = parser->scope;
15179      parser->object_scope = NULL_TREE;
15180    }
15181  else if (object_type)
15182    {
15183      tree object_decl = NULL_TREE;
15184      /* Look up the name in the scope of the OBJECT_TYPE, unless the
15185	 OBJECT_TYPE is not a class.  */
15186      if (CLASS_TYPE_P (object_type))
15187	/* If the OBJECT_TYPE is a template specialization, it may
15188	   be instantiated during name lookup.  In that case, errors
15189	   may be issued.  Even if we rollback the current tentative
15190	   parse, those errors are valid.  */
15191	object_decl = lookup_member (object_type,
15192				     name,
15193				     /*protect=*/0,
15194				     tag_type != none_type);
15195      /* Look it up in the enclosing context, too.  */
15196      decl = lookup_name_real (name, tag_type != none_type,
15197			       /*nonclass=*/0,
15198			       /*block_p=*/true, is_namespace, flags);
15199      parser->object_scope = object_type;
15200      parser->qualifying_scope = NULL_TREE;
15201      if (object_decl)
15202	decl = object_decl;
15203    }
15204  else
15205    {
15206      decl = lookup_name_real (name, tag_type != none_type,
15207			       /*nonclass=*/0,
15208			       /*block_p=*/true, is_namespace, flags);
15209      parser->qualifying_scope = NULL_TREE;
15210      parser->object_scope = NULL_TREE;
15211    }
15212
15213  /* If the lookup failed, let our caller know.  */
15214  if (!decl || decl == error_mark_node)
15215    return error_mark_node;
15216
15217  /* If it's a TREE_LIST, the result of the lookup was ambiguous.  */
15218  if (TREE_CODE (decl) == TREE_LIST)
15219    {
15220      if (ambiguous_decls)
15221	*ambiguous_decls = decl;
15222      /* The error message we have to print is too complicated for
15223	 cp_parser_error, so we incorporate its actions directly.  */
15224      if (!cp_parser_simulate_error (parser))
15225	{
15226	  error ("reference to %qD is ambiguous", name);
15227	  print_candidates (decl);
15228	}
15229      return error_mark_node;
15230    }
15231
15232  gcc_assert (DECL_P (decl)
15233	      || TREE_CODE (decl) == OVERLOAD
15234	      || TREE_CODE (decl) == SCOPE_REF
15235	      || TREE_CODE (decl) == UNBOUND_CLASS_TEMPLATE
15236	      || BASELINK_P (decl));
15237
15238  /* If we have resolved the name of a member declaration, check to
15239     see if the declaration is accessible.  When the name resolves to
15240     set of overloaded functions, accessibility is checked when
15241     overload resolution is done.
15242
15243     During an explicit instantiation, access is not checked at all,
15244     as per [temp.explicit].  */
15245  if (DECL_P (decl))
15246    check_accessibility_of_qualified_id (decl, object_type, parser->scope);
15247
15248  return decl;
15249}
15250
15251/* Like cp_parser_lookup_name, but for use in the typical case where
15252   CHECK_ACCESS is TRUE, IS_TYPE is FALSE, IS_TEMPLATE is FALSE,
15253   IS_NAMESPACE is FALSE, and CHECK_DEPENDENCY is TRUE.  */
15254
15255static tree
15256cp_parser_lookup_name_simple (cp_parser* parser, tree name)
15257{
15258  return cp_parser_lookup_name (parser, name,
15259				none_type,
15260				/*is_template=*/false,
15261				/*is_namespace=*/false,
15262				/*check_dependency=*/true,
15263				/*ambiguous_decls=*/NULL);
15264}
15265
15266/* If DECL is a TEMPLATE_DECL that can be treated like a TYPE_DECL in
15267   the current context, return the TYPE_DECL.  If TAG_NAME_P is
15268   true, the DECL indicates the class being defined in a class-head,
15269   or declared in an elaborated-type-specifier.
15270
15271   Otherwise, return DECL.  */
15272
15273static tree
15274cp_parser_maybe_treat_template_as_class (tree decl, bool tag_name_p)
15275{
15276  /* If the TEMPLATE_DECL is being declared as part of a class-head,
15277     the translation from TEMPLATE_DECL to TYPE_DECL occurs:
15278
15279       struct A {
15280	 template <typename T> struct B;
15281       };
15282
15283       template <typename T> struct A::B {};
15284
15285     Similarly, in an elaborated-type-specifier:
15286
15287       namespace N { struct X{}; }
15288
15289       struct A {
15290	 template <typename T> friend struct N::X;
15291       };
15292
15293     However, if the DECL refers to a class type, and we are in
15294     the scope of the class, then the name lookup automatically
15295     finds the TYPE_DECL created by build_self_reference rather
15296     than a TEMPLATE_DECL.  For example, in:
15297
15298       template <class T> struct S {
15299	 S s;
15300       };
15301
15302     there is no need to handle such case.  */
15303
15304  if (DECL_CLASS_TEMPLATE_P (decl) && tag_name_p)
15305    return DECL_TEMPLATE_RESULT (decl);
15306
15307  return decl;
15308}
15309
15310/* If too many, or too few, template-parameter lists apply to the
15311   declarator, issue an error message.  Returns TRUE if all went well,
15312   and FALSE otherwise.  */
15313
15314static bool
15315cp_parser_check_declarator_template_parameters (cp_parser* parser,
15316						cp_declarator *declarator)
15317{
15318  unsigned num_templates;
15319
15320  /* We haven't seen any classes that involve template parameters yet.  */
15321  num_templates = 0;
15322
15323  switch (declarator->kind)
15324    {
15325    case cdk_id:
15326      if (declarator->u.id.qualifying_scope)
15327	{
15328	  tree scope;
15329	  tree member;
15330
15331	  scope = declarator->u.id.qualifying_scope;
15332	  member = declarator->u.id.unqualified_name;
15333
15334	  while (scope && CLASS_TYPE_P (scope))
15335	    {
15336	      /* You're supposed to have one `template <...>'
15337		 for every template class, but you don't need one
15338		 for a full specialization.  For example:
15339
15340		 template <class T> struct S{};
15341		 template <> struct S<int> { void f(); };
15342		 void S<int>::f () {}
15343
15344		 is correct; there shouldn't be a `template <>' for
15345		 the definition of `S<int>::f'.  */
15346	      if (!CLASSTYPE_TEMPLATE_INFO (scope))
15347		/* If SCOPE does not have template information of any
15348		   kind, then it is not a template, nor is it nested
15349		   within a template.  */
15350		break;
15351	      if (explicit_class_specialization_p (scope))
15352		break;
15353	      if (PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (scope)))
15354		++num_templates;
15355
15356	      scope = TYPE_CONTEXT (scope);
15357	    }
15358	}
15359      else if (TREE_CODE (declarator->u.id.unqualified_name)
15360	       == TEMPLATE_ID_EXPR)
15361	/* If the DECLARATOR has the form `X<y>' then it uses one
15362	   additional level of template parameters.  */
15363	++num_templates;
15364
15365      return cp_parser_check_template_parameters (parser,
15366						  num_templates);
15367
15368    case cdk_function:
15369    case cdk_array:
15370    case cdk_pointer:
15371    case cdk_reference:
15372    case cdk_ptrmem:
15373      return (cp_parser_check_declarator_template_parameters
15374	      (parser, declarator->declarator));
15375
15376    case cdk_error:
15377      return true;
15378
15379    default:
15380      gcc_unreachable ();
15381    }
15382  return false;
15383}
15384
15385/* NUM_TEMPLATES were used in the current declaration.  If that is
15386   invalid, return FALSE and issue an error messages.  Otherwise,
15387   return TRUE.  */
15388
15389static bool
15390cp_parser_check_template_parameters (cp_parser* parser,
15391				     unsigned num_templates)
15392{
15393  /* If there are more template classes than parameter lists, we have
15394     something like:
15395
15396       template <class T> void S<T>::R<T>::f ();  */
15397  if (parser->num_template_parameter_lists < num_templates)
15398    {
15399      error ("too few template-parameter-lists");
15400      return false;
15401    }
15402  /* If there are the same number of template classes and parameter
15403     lists, that's OK.  */
15404  if (parser->num_template_parameter_lists == num_templates)
15405    return true;
15406  /* If there are more, but only one more, then we are referring to a
15407     member template.  That's OK too.  */
15408  if (parser->num_template_parameter_lists == num_templates + 1)
15409      return true;
15410  /* Otherwise, there are too many template parameter lists.  We have
15411     something like:
15412
15413     template <class T> template <class U> void S::f();  */
15414  error ("too many template-parameter-lists");
15415  return false;
15416}
15417
15418/* Parse an optional `::' token indicating that the following name is
15419   from the global namespace.  If so, PARSER->SCOPE is set to the
15420   GLOBAL_NAMESPACE. Otherwise, PARSER->SCOPE is set to NULL_TREE,
15421   unless CURRENT_SCOPE_VALID_P is TRUE, in which case it is left alone.
15422   Returns the new value of PARSER->SCOPE, if the `::' token is
15423   present, and NULL_TREE otherwise.  */
15424
15425static tree
15426cp_parser_global_scope_opt (cp_parser* parser, bool current_scope_valid_p)
15427{
15428  cp_token *token;
15429
15430  /* Peek at the next token.  */
15431  token = cp_lexer_peek_token (parser->lexer);
15432  /* If we're looking at a `::' token then we're starting from the
15433     global namespace, not our current location.  */
15434  if (token->type == CPP_SCOPE)
15435    {
15436      /* Consume the `::' token.  */
15437      cp_lexer_consume_token (parser->lexer);
15438      /* Set the SCOPE so that we know where to start the lookup.  */
15439      parser->scope = global_namespace;
15440      parser->qualifying_scope = global_namespace;
15441      parser->object_scope = NULL_TREE;
15442
15443      return parser->scope;
15444    }
15445  else if (!current_scope_valid_p)
15446    {
15447      parser->scope = NULL_TREE;
15448      parser->qualifying_scope = NULL_TREE;
15449      parser->object_scope = NULL_TREE;
15450    }
15451
15452  return NULL_TREE;
15453}
15454
15455/* Returns TRUE if the upcoming token sequence is the start of a
15456   constructor declarator.  If FRIEND_P is true, the declarator is
15457   preceded by the `friend' specifier.  */
15458
15459static bool
15460cp_parser_constructor_declarator_p (cp_parser *parser, bool friend_p)
15461{
15462  bool constructor_p;
15463  tree type_decl = NULL_TREE;
15464  bool nested_name_p;
15465  cp_token *next_token;
15466
15467  /* The common case is that this is not a constructor declarator, so
15468     try to avoid doing lots of work if at all possible.  It's not
15469     valid declare a constructor at function scope.  */
15470  if (parser->in_function_body)
15471    return false;
15472  /* And only certain tokens can begin a constructor declarator.  */
15473  next_token = cp_lexer_peek_token (parser->lexer);
15474  if (next_token->type != CPP_NAME
15475      && next_token->type != CPP_SCOPE
15476      && next_token->type != CPP_NESTED_NAME_SPECIFIER
15477      && next_token->type != CPP_TEMPLATE_ID)
15478    return false;
15479
15480  /* Parse tentatively; we are going to roll back all of the tokens
15481     consumed here.  */
15482  cp_parser_parse_tentatively (parser);
15483  /* Assume that we are looking at a constructor declarator.  */
15484  constructor_p = true;
15485
15486  /* Look for the optional `::' operator.  */
15487  cp_parser_global_scope_opt (parser,
15488			      /*current_scope_valid_p=*/false);
15489  /* Look for the nested-name-specifier.  */
15490  nested_name_p
15491    = (cp_parser_nested_name_specifier_opt (parser,
15492					    /*typename_keyword_p=*/false,
15493					    /*check_dependency_p=*/false,
15494					    /*type_p=*/false,
15495					    /*is_declaration=*/false)
15496       != NULL_TREE);
15497  /* Outside of a class-specifier, there must be a
15498     nested-name-specifier.  */
15499  if (!nested_name_p &&
15500      (!at_class_scope_p () || !TYPE_BEING_DEFINED (current_class_type)
15501       || friend_p))
15502    constructor_p = false;
15503  /* If we still think that this might be a constructor-declarator,
15504     look for a class-name.  */
15505  if (constructor_p)
15506    {
15507      /* If we have:
15508
15509	   template <typename T> struct S { S(); };
15510	   template <typename T> S<T>::S ();
15511
15512	 we must recognize that the nested `S' names a class.
15513	 Similarly, for:
15514
15515	   template <typename T> S<T>::S<T> ();
15516
15517	 we must recognize that the nested `S' names a template.  */
15518      type_decl = cp_parser_class_name (parser,
15519					/*typename_keyword_p=*/false,
15520					/*template_keyword_p=*/false,
15521					none_type,
15522					/*check_dependency_p=*/false,
15523					/*class_head_p=*/false,
15524					/*is_declaration=*/false);
15525      /* If there was no class-name, then this is not a constructor.  */
15526      constructor_p = !cp_parser_error_occurred (parser);
15527    }
15528
15529  /* If we're still considering a constructor, we have to see a `(',
15530     to begin the parameter-declaration-clause, followed by either a
15531     `)', an `...', or a decl-specifier.  We need to check for a
15532     type-specifier to avoid being fooled into thinking that:
15533
15534       S::S (f) (int);
15535
15536     is a constructor.  (It is actually a function named `f' that
15537     takes one parameter (of type `int') and returns a value of type
15538     `S::S'.  */
15539  if (constructor_p
15540      && cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
15541    {
15542      if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN)
15543	  && cp_lexer_next_token_is_not (parser->lexer, CPP_ELLIPSIS)
15544	  /* A parameter declaration begins with a decl-specifier,
15545	     which is either the "attribute" keyword, a storage class
15546	     specifier, or (usually) a type-specifier.  */
15547	  && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer))
15548	{
15549	  tree type;
15550	  tree pushed_scope = NULL_TREE;
15551	  unsigned saved_num_template_parameter_lists;
15552
15553	  /* Names appearing in the type-specifier should be looked up
15554	     in the scope of the class.  */
15555	  if (current_class_type)
15556	    type = NULL_TREE;
15557	  else
15558	    {
15559	      type = TREE_TYPE (type_decl);
15560	      if (TREE_CODE (type) == TYPENAME_TYPE)
15561		{
15562		  type = resolve_typename_type (type,
15563						/*only_current_p=*/false);
15564		  if (type == error_mark_node)
15565		    {
15566		      cp_parser_abort_tentative_parse (parser);
15567		      return false;
15568		    }
15569		}
15570	      pushed_scope = push_scope (type);
15571	    }
15572
15573	  /* Inside the constructor parameter list, surrounding
15574	     template-parameter-lists do not apply.  */
15575	  saved_num_template_parameter_lists
15576	    = parser->num_template_parameter_lists;
15577	  parser->num_template_parameter_lists = 0;
15578
15579	  /* Look for the type-specifier.  */
15580	  cp_parser_type_specifier (parser,
15581				    CP_PARSER_FLAGS_NONE,
15582				    /*decl_specs=*/NULL,
15583				    /*is_declarator=*/true,
15584				    /*declares_class_or_enum=*/NULL,
15585				    /*is_cv_qualifier=*/NULL);
15586
15587	  parser->num_template_parameter_lists
15588	    = saved_num_template_parameter_lists;
15589
15590	  /* Leave the scope of the class.  */
15591	  if (pushed_scope)
15592	    pop_scope (pushed_scope);
15593
15594	  constructor_p = !cp_parser_error_occurred (parser);
15595	}
15596    }
15597  else
15598    constructor_p = false;
15599  /* We did not really want to consume any tokens.  */
15600  cp_parser_abort_tentative_parse (parser);
15601
15602  return constructor_p;
15603}
15604
15605/* Parse the definition of the function given by the DECL_SPECIFIERS,
15606   ATTRIBUTES, and DECLARATOR.  The access checks have been deferred;
15607   they must be performed once we are in the scope of the function.
15608
15609   Returns the function defined.  */
15610
15611static tree
15612cp_parser_function_definition_from_specifiers_and_declarator
15613  (cp_parser* parser,
15614   cp_decl_specifier_seq *decl_specifiers,
15615   tree attributes,
15616   const cp_declarator *declarator)
15617{
15618  tree fn;
15619  bool success_p;
15620
15621  /* Begin the function-definition.  */
15622  success_p = start_function (decl_specifiers, declarator, attributes);
15623
15624  /* The things we're about to see are not directly qualified by any
15625     template headers we've seen thus far.  */
15626  reset_specialization ();
15627
15628  /* If there were names looked up in the decl-specifier-seq that we
15629     did not check, check them now.  We must wait until we are in the
15630     scope of the function to perform the checks, since the function
15631     might be a friend.  */
15632  perform_deferred_access_checks ();
15633
15634  if (!success_p)
15635    {
15636      /* Skip the entire function.  */
15637      cp_parser_skip_to_end_of_block_or_statement (parser);
15638      fn = error_mark_node;
15639    }
15640  else if (DECL_INITIAL (current_function_decl) != error_mark_node)
15641    {
15642      /* Seen already, skip it.  An error message has already been output.  */
15643      cp_parser_skip_to_end_of_block_or_statement (parser);
15644      fn = current_function_decl;
15645      current_function_decl = NULL_TREE;
15646      /* If this is a function from a class, pop the nested class.  */
15647      if (current_class_name)
15648	pop_nested_class ();
15649    }
15650  else
15651    fn = cp_parser_function_definition_after_declarator (parser,
15652							 /*inline_p=*/false);
15653
15654  return fn;
15655}
15656
15657/* Parse the part of a function-definition that follows the
15658   declarator.  INLINE_P is TRUE iff this function is an inline
15659   function defined with a class-specifier.
15660
15661   Returns the function defined.  */
15662
15663static tree
15664cp_parser_function_definition_after_declarator (cp_parser* parser,
15665						bool inline_p)
15666{
15667  tree fn;
15668  bool ctor_initializer_p = false;
15669  bool saved_in_unbraced_linkage_specification_p;
15670  bool saved_in_function_body;
15671  unsigned saved_num_template_parameter_lists;
15672
15673  saved_in_function_body = parser->in_function_body;
15674  parser->in_function_body = true;
15675  /* If the next token is `return', then the code may be trying to
15676     make use of the "named return value" extension that G++ used to
15677     support.  */
15678  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_RETURN))
15679    {
15680      /* Consume the `return' keyword.  */
15681      cp_lexer_consume_token (parser->lexer);
15682      /* Look for the identifier that indicates what value is to be
15683	 returned.  */
15684      cp_parser_identifier (parser);
15685      /* Issue an error message.  */
15686      error ("named return values are no longer supported");
15687      /* Skip tokens until we reach the start of the function body.  */
15688      while (true)
15689	{
15690	  cp_token *token = cp_lexer_peek_token (parser->lexer);
15691	  if (token->type == CPP_OPEN_BRACE
15692	      || token->type == CPP_EOF
15693	      || token->type == CPP_PRAGMA_EOL)
15694	    break;
15695	  cp_lexer_consume_token (parser->lexer);
15696	}
15697    }
15698  /* The `extern' in `extern "C" void f () { ... }' does not apply to
15699     anything declared inside `f'.  */
15700  saved_in_unbraced_linkage_specification_p
15701    = parser->in_unbraced_linkage_specification_p;
15702  parser->in_unbraced_linkage_specification_p = false;
15703  /* Inside the function, surrounding template-parameter-lists do not
15704     apply.  */
15705  saved_num_template_parameter_lists
15706    = parser->num_template_parameter_lists;
15707  parser->num_template_parameter_lists = 0;
15708  /* If the next token is `try', then we are looking at a
15709     function-try-block.  */
15710  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TRY))
15711    ctor_initializer_p = cp_parser_function_try_block (parser);
15712  /* A function-try-block includes the function-body, so we only do
15713     this next part if we're not processing a function-try-block.  */
15714  else
15715    ctor_initializer_p
15716      = cp_parser_ctor_initializer_opt_and_function_body (parser);
15717
15718  /* Finish the function.  */
15719  fn = finish_function ((ctor_initializer_p ? 1 : 0) |
15720			(inline_p ? 2 : 0));
15721  /* Generate code for it, if necessary.  */
15722  expand_or_defer_fn (fn);
15723  /* Restore the saved values.  */
15724  parser->in_unbraced_linkage_specification_p
15725    = saved_in_unbraced_linkage_specification_p;
15726  parser->num_template_parameter_lists
15727    = saved_num_template_parameter_lists;
15728  parser->in_function_body = saved_in_function_body;
15729
15730  return fn;
15731}
15732
15733/* Parse a template-declaration, assuming that the `export' (and
15734   `extern') keywords, if present, has already been scanned.  MEMBER_P
15735   is as for cp_parser_template_declaration.  */
15736
15737static void
15738cp_parser_template_declaration_after_export (cp_parser* parser, bool member_p)
15739{
15740  tree decl = NULL_TREE;
15741  VEC (deferred_access_check,gc) *checks;
15742  tree parameter_list;
15743  bool friend_p = false;
15744  bool need_lang_pop;
15745
15746  /* Look for the `template' keyword.  */
15747  if (!cp_parser_require_keyword (parser, RID_TEMPLATE, "`template'"))
15748    return;
15749
15750  /* And the `<'.  */
15751  if (!cp_parser_require (parser, CPP_LESS, "`<'"))
15752    return;
15753  if (at_class_scope_p () && current_function_decl)
15754    {
15755      /* 14.5.2.2 [temp.mem]
15756
15757         A local class shall not have member templates.  */
15758      error ("invalid declaration of member template in local class");
15759      cp_parser_skip_to_end_of_block_or_statement (parser);
15760      return;
15761    }
15762  /* [temp]
15763
15764     A template ... shall not have C linkage.  */
15765  if (current_lang_name == lang_name_c)
15766    {
15767      error ("template with C linkage");
15768      /* Give it C++ linkage to avoid confusing other parts of the
15769	 front end.  */
15770      push_lang_context (lang_name_cplusplus);
15771      need_lang_pop = true;
15772    }
15773  else
15774    need_lang_pop = false;
15775
15776  /* We cannot perform access checks on the template parameter
15777     declarations until we know what is being declared, just as we
15778     cannot check the decl-specifier list.  */
15779  push_deferring_access_checks (dk_deferred);
15780
15781  /* If the next token is `>', then we have an invalid
15782     specialization.  Rather than complain about an invalid template
15783     parameter, issue an error message here.  */
15784  if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
15785    {
15786      cp_parser_error (parser, "invalid explicit specialization");
15787      begin_specialization ();
15788      parameter_list = NULL_TREE;
15789    }
15790  else
15791    /* Parse the template parameters.  */
15792    parameter_list = cp_parser_template_parameter_list (parser);
15793
15794  /* Get the deferred access checks from the parameter list.  These
15795     will be checked once we know what is being declared, as for a
15796     member template the checks must be performed in the scope of the
15797     class containing the member.  */
15798  checks = get_deferred_access_checks ();
15799
15800  /* Look for the `>'.  */
15801  cp_parser_skip_to_end_of_template_parameter_list (parser);
15802  /* We just processed one more parameter list.  */
15803  ++parser->num_template_parameter_lists;
15804  /* If the next token is `template', there are more template
15805     parameters.  */
15806  if (cp_lexer_next_token_is_keyword (parser->lexer,
15807				      RID_TEMPLATE))
15808    cp_parser_template_declaration_after_export (parser, member_p);
15809  else
15810    {
15811      /* There are no access checks when parsing a template, as we do not
15812	 know if a specialization will be a friend.  */
15813      push_deferring_access_checks (dk_no_check);
15814      decl = cp_parser_single_declaration (parser,
15815					   checks,
15816					   member_p,
15817					   &friend_p);
15818      pop_deferring_access_checks ();
15819
15820      /* If this is a member template declaration, let the front
15821	 end know.  */
15822      if (member_p && !friend_p && decl)
15823	{
15824	  if (TREE_CODE (decl) == TYPE_DECL)
15825	    cp_parser_check_access_in_redeclaration (decl);
15826
15827	  decl = finish_member_template_decl (decl);
15828	}
15829      else if (friend_p && decl && TREE_CODE (decl) == TYPE_DECL)
15830	make_friend_class (current_class_type, TREE_TYPE (decl),
15831			   /*complain=*/true);
15832    }
15833  /* We are done with the current parameter list.  */
15834  --parser->num_template_parameter_lists;
15835
15836  pop_deferring_access_checks ();
15837
15838  /* Finish up.  */
15839  finish_template_decl (parameter_list);
15840
15841  /* Register member declarations.  */
15842  if (member_p && !friend_p && decl && !DECL_CLASS_TEMPLATE_P (decl))
15843    finish_member_declaration (decl);
15844  /* For the erroneous case of a template with C linkage, we pushed an
15845     implicit C++ linkage scope; exit that scope now.  */
15846  if (need_lang_pop)
15847    pop_lang_context ();
15848  /* If DECL is a function template, we must return to parse it later.
15849     (Even though there is no definition, there might be default
15850     arguments that need handling.)  */
15851  if (member_p && decl
15852      && (TREE_CODE (decl) == FUNCTION_DECL
15853	  || DECL_FUNCTION_TEMPLATE_P (decl)))
15854    TREE_VALUE (parser->unparsed_functions_queues)
15855      = tree_cons (NULL_TREE, decl,
15856		   TREE_VALUE (parser->unparsed_functions_queues));
15857}
15858
15859/* Perform the deferred access checks from a template-parameter-list.
15860   CHECKS is a TREE_LIST of access checks, as returned by
15861   get_deferred_access_checks.  */
15862
15863static void
15864cp_parser_perform_template_parameter_access_checks (VEC (deferred_access_check,gc)* checks)
15865{
15866  ++processing_template_parmlist;
15867  perform_access_checks (checks);
15868  --processing_template_parmlist;
15869}
15870
15871/* Parse a `decl-specifier-seq [opt] init-declarator [opt] ;' or
15872   `function-definition' sequence.  MEMBER_P is true, this declaration
15873   appears in a class scope.
15874
15875   Returns the DECL for the declared entity.  If FRIEND_P is non-NULL,
15876   *FRIEND_P is set to TRUE iff the declaration is a friend.  */
15877
15878static tree
15879cp_parser_single_declaration (cp_parser* parser,
15880			      VEC (deferred_access_check,gc)* checks,
15881			      bool member_p,
15882			      bool* friend_p)
15883{
15884  int declares_class_or_enum;
15885  tree decl = NULL_TREE;
15886  cp_decl_specifier_seq decl_specifiers;
15887  bool function_definition_p = false;
15888
15889  /* This function is only used when processing a template
15890     declaration.  */
15891  gcc_assert (innermost_scope_kind () == sk_template_parms
15892	      || innermost_scope_kind () == sk_template_spec);
15893
15894  /* Defer access checks until we know what is being declared.  */
15895  push_deferring_access_checks (dk_deferred);
15896
15897  /* Try the `decl-specifier-seq [opt] init-declarator [opt]'
15898     alternative.  */
15899  cp_parser_decl_specifier_seq (parser,
15900				CP_PARSER_FLAGS_OPTIONAL,
15901				&decl_specifiers,
15902				&declares_class_or_enum);
15903  if (friend_p)
15904    *friend_p = cp_parser_friend_p (&decl_specifiers);
15905
15906  /* There are no template typedefs.  */
15907  if (decl_specifiers.specs[(int) ds_typedef])
15908    {
15909      error ("template declaration of %qs", "typedef");
15910      decl = error_mark_node;
15911    }
15912
15913  /* Gather up the access checks that occurred the
15914     decl-specifier-seq.  */
15915  stop_deferring_access_checks ();
15916
15917  /* Check for the declaration of a template class.  */
15918  if (declares_class_or_enum)
15919    {
15920      if (cp_parser_declares_only_class_p (parser))
15921	{
15922	  decl = shadow_tag (&decl_specifiers);
15923
15924	  /* In this case:
15925
15926	       struct C {
15927		 friend template <typename T> struct A<T>::B;
15928	       };
15929
15930	     A<T>::B will be represented by a TYPENAME_TYPE, and
15931	     therefore not recognized by shadow_tag.  */
15932	  if (friend_p && *friend_p
15933	      && !decl
15934	      && decl_specifiers.type
15935	      && TYPE_P (decl_specifiers.type))
15936	    decl = decl_specifiers.type;
15937
15938	  if (decl && decl != error_mark_node)
15939	    decl = TYPE_NAME (decl);
15940	  else
15941	    decl = error_mark_node;
15942
15943	  /* Perform access checks for template parameters.  */
15944	  cp_parser_perform_template_parameter_access_checks (checks);
15945	}
15946    }
15947  /* If it's not a template class, try for a template function.  If
15948     the next token is a `;', then this declaration does not declare
15949     anything.  But, if there were errors in the decl-specifiers, then
15950     the error might well have come from an attempted class-specifier.
15951     In that case, there's no need to warn about a missing declarator.  */
15952  if (!decl
15953      && (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON)
15954	  || decl_specifiers.type != error_mark_node))
15955    decl = cp_parser_init_declarator (parser,
15956				      &decl_specifiers,
15957				      checks,
15958				      /*function_definition_allowed_p=*/true,
15959				      member_p,
15960				      declares_class_or_enum,
15961				      &function_definition_p);
15962
15963  pop_deferring_access_checks ();
15964
15965  /* Clear any current qualification; whatever comes next is the start
15966     of something new.  */
15967  parser->scope = NULL_TREE;
15968  parser->qualifying_scope = NULL_TREE;
15969  parser->object_scope = NULL_TREE;
15970  /* Look for a trailing `;' after the declaration.  */
15971  if (!function_definition_p
15972      && (decl == error_mark_node
15973	  || !cp_parser_require (parser, CPP_SEMICOLON, "`;'")))
15974    cp_parser_skip_to_end_of_block_or_statement (parser);
15975
15976  return decl;
15977}
15978
15979/* Parse a cast-expression that is not the operand of a unary "&".  */
15980
15981static tree
15982cp_parser_simple_cast_expression (cp_parser *parser)
15983{
15984  return cp_parser_cast_expression (parser, /*address_p=*/false,
15985				    /*cast_p=*/false);
15986}
15987
15988/* Parse a functional cast to TYPE.  Returns an expression
15989   representing the cast.  */
15990
15991static tree
15992cp_parser_functional_cast (cp_parser* parser, tree type)
15993{
15994  tree expression_list;
15995  tree cast;
15996
15997  expression_list
15998    = cp_parser_parenthesized_expression_list (parser, false,
15999					       /*cast_p=*/true,
16000					       /*non_constant_p=*/NULL);
16001
16002  cast = build_functional_cast (type, expression_list);
16003  /* [expr.const]/1: In an integral constant expression "only type
16004     conversions to integral or enumeration type can be used".  */
16005  if (TREE_CODE (type) == TYPE_DECL)
16006    type = TREE_TYPE (type);
16007  if (cast != error_mark_node
16008      && !cast_valid_in_integral_constant_expression_p (type)
16009      && (cp_parser_non_integral_constant_expression
16010	  (parser, "a call to a constructor")))
16011    return error_mark_node;
16012  return cast;
16013}
16014
16015/* Save the tokens that make up the body of a member function defined
16016   in a class-specifier.  The DECL_SPECIFIERS and DECLARATOR have
16017   already been parsed.  The ATTRIBUTES are any GNU "__attribute__"
16018   specifiers applied to the declaration.  Returns the FUNCTION_DECL
16019   for the member function.  */
16020
16021static tree
16022cp_parser_save_member_function_body (cp_parser* parser,
16023				     cp_decl_specifier_seq *decl_specifiers,
16024				     cp_declarator *declarator,
16025				     tree attributes)
16026{
16027  cp_token *first;
16028  cp_token *last;
16029  tree fn;
16030
16031  /* Create the function-declaration.  */
16032  fn = start_method (decl_specifiers, declarator, attributes);
16033  /* If something went badly wrong, bail out now.  */
16034  if (fn == error_mark_node)
16035    {
16036      /* If there's a function-body, skip it.  */
16037      if (cp_parser_token_starts_function_definition_p
16038	  (cp_lexer_peek_token (parser->lexer)))
16039	cp_parser_skip_to_end_of_block_or_statement (parser);
16040      return error_mark_node;
16041    }
16042
16043  /* Remember it, if there default args to post process.  */
16044  cp_parser_save_default_args (parser, fn);
16045
16046  /* Save away the tokens that make up the body of the
16047     function.  */
16048  first = parser->lexer->next_token;
16049  cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
16050  /* Handle function try blocks.  */
16051  while (cp_lexer_next_token_is_keyword (parser->lexer, RID_CATCH))
16052    cp_parser_cache_group (parser, CPP_CLOSE_BRACE, /*depth=*/0);
16053  last = parser->lexer->next_token;
16054
16055  /* Save away the inline definition; we will process it when the
16056     class is complete.  */
16057  DECL_PENDING_INLINE_INFO (fn) = cp_token_cache_new (first, last);
16058  DECL_PENDING_INLINE_P (fn) = 1;
16059
16060  /* We need to know that this was defined in the class, so that
16061     friend templates are handled correctly.  */
16062  DECL_INITIALIZED_IN_CLASS_P (fn) = 1;
16063
16064  /* We're done with the inline definition.  */
16065  finish_method (fn);
16066
16067  /* Add FN to the queue of functions to be parsed later.  */
16068  TREE_VALUE (parser->unparsed_functions_queues)
16069    = tree_cons (NULL_TREE, fn,
16070		 TREE_VALUE (parser->unparsed_functions_queues));
16071
16072  return fn;
16073}
16074
16075/* Parse a template-argument-list, as well as the trailing ">" (but
16076   not the opening ">").  See cp_parser_template_argument_list for the
16077   return value.  */
16078
16079static tree
16080cp_parser_enclosed_template_argument_list (cp_parser* parser)
16081{
16082  tree arguments;
16083  tree saved_scope;
16084  tree saved_qualifying_scope;
16085  tree saved_object_scope;
16086  bool saved_greater_than_is_operator_p;
16087  bool saved_skip_evaluation;
16088
16089  /* [temp.names]
16090
16091     When parsing a template-id, the first non-nested `>' is taken as
16092     the end of the template-argument-list rather than a greater-than
16093     operator.  */
16094  saved_greater_than_is_operator_p
16095    = parser->greater_than_is_operator_p;
16096  parser->greater_than_is_operator_p = false;
16097  /* Parsing the argument list may modify SCOPE, so we save it
16098     here.  */
16099  saved_scope = parser->scope;
16100  saved_qualifying_scope = parser->qualifying_scope;
16101  saved_object_scope = parser->object_scope;
16102  /* We need to evaluate the template arguments, even though this
16103     template-id may be nested within a "sizeof".  */
16104  saved_skip_evaluation = skip_evaluation;
16105  skip_evaluation = false;
16106  /* Parse the template-argument-list itself.  */
16107  if (cp_lexer_next_token_is (parser->lexer, CPP_GREATER))
16108    arguments = NULL_TREE;
16109  else
16110    arguments = cp_parser_template_argument_list (parser);
16111  /* Look for the `>' that ends the template-argument-list. If we find
16112     a '>>' instead, it's probably just a typo.  */
16113  if (cp_lexer_next_token_is (parser->lexer, CPP_RSHIFT))
16114    {
16115      if (!saved_greater_than_is_operator_p)
16116	{
16117	  /* If we're in a nested template argument list, the '>>' has
16118	    to be a typo for '> >'. We emit the error message, but we
16119	    continue parsing and we push a '>' as next token, so that
16120	    the argument list will be parsed correctly.  Note that the
16121	    global source location is still on the token before the
16122	    '>>', so we need to say explicitly where we want it.  */
16123	  cp_token *token = cp_lexer_peek_token (parser->lexer);
16124	  error ("%H%<>>%> should be %<> >%> "
16125		 "within a nested template argument list",
16126		 &token->location);
16127
16128	  /* ??? Proper recovery should terminate two levels of
16129	     template argument list here.  */
16130	  token->type = CPP_GREATER;
16131	}
16132      else
16133	{
16134	  /* If this is not a nested template argument list, the '>>'
16135	    is a typo for '>'. Emit an error message and continue.
16136	    Same deal about the token location, but here we can get it
16137	    right by consuming the '>>' before issuing the diagnostic.  */
16138	  cp_lexer_consume_token (parser->lexer);
16139	  error ("spurious %<>>%>, use %<>%> to terminate "
16140		 "a template argument list");
16141	}
16142    }
16143  else
16144    cp_parser_skip_to_end_of_template_parameter_list (parser);
16145  /* The `>' token might be a greater-than operator again now.  */
16146  parser->greater_than_is_operator_p
16147    = saved_greater_than_is_operator_p;
16148  /* Restore the SAVED_SCOPE.  */
16149  parser->scope = saved_scope;
16150  parser->qualifying_scope = saved_qualifying_scope;
16151  parser->object_scope = saved_object_scope;
16152  skip_evaluation = saved_skip_evaluation;
16153
16154  return arguments;
16155}
16156
16157/* MEMBER_FUNCTION is a member function, or a friend.  If default
16158   arguments, or the body of the function have not yet been parsed,
16159   parse them now.  */
16160
16161static void
16162cp_parser_late_parsing_for_member (cp_parser* parser, tree member_function)
16163{
16164  /* If this member is a template, get the underlying
16165     FUNCTION_DECL.  */
16166  if (DECL_FUNCTION_TEMPLATE_P (member_function))
16167    member_function = DECL_TEMPLATE_RESULT (member_function);
16168
16169  /* There should not be any class definitions in progress at this
16170     point; the bodies of members are only parsed outside of all class
16171     definitions.  */
16172  gcc_assert (parser->num_classes_being_defined == 0);
16173  /* While we're parsing the member functions we might encounter more
16174     classes.  We want to handle them right away, but we don't want
16175     them getting mixed up with functions that are currently in the
16176     queue.  */
16177  parser->unparsed_functions_queues
16178    = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16179
16180  /* Make sure that any template parameters are in scope.  */
16181  maybe_begin_member_template_processing (member_function);
16182
16183  /* If the body of the function has not yet been parsed, parse it
16184     now.  */
16185  if (DECL_PENDING_INLINE_P (member_function))
16186    {
16187      tree function_scope;
16188      cp_token_cache *tokens;
16189
16190      /* The function is no longer pending; we are processing it.  */
16191      tokens = DECL_PENDING_INLINE_INFO (member_function);
16192      DECL_PENDING_INLINE_INFO (member_function) = NULL;
16193      DECL_PENDING_INLINE_P (member_function) = 0;
16194
16195      /* If this is a local class, enter the scope of the containing
16196	 function.  */
16197      function_scope = current_function_decl;
16198      if (function_scope)
16199	push_function_context_to (function_scope);
16200
16201
16202      /* Push the body of the function onto the lexer stack.  */
16203      cp_parser_push_lexer_for_tokens (parser, tokens);
16204
16205      /* Let the front end know that we going to be defining this
16206	 function.  */
16207      start_preparsed_function (member_function, NULL_TREE,
16208				SF_PRE_PARSED | SF_INCLASS_INLINE);
16209
16210      /* Don't do access checking if it is a templated function.  */
16211      if (processing_template_decl)
16212	push_deferring_access_checks (dk_no_check);
16213
16214      /* Now, parse the body of the function.  */
16215      cp_parser_function_definition_after_declarator (parser,
16216						      /*inline_p=*/true);
16217
16218      if (processing_template_decl)
16219	pop_deferring_access_checks ();
16220
16221      /* Leave the scope of the containing function.  */
16222      if (function_scope)
16223	pop_function_context_from (function_scope);
16224      cp_parser_pop_lexer (parser);
16225    }
16226
16227  /* Remove any template parameters from the symbol table.  */
16228  maybe_end_member_template_processing ();
16229
16230  /* Restore the queue.  */
16231  parser->unparsed_functions_queues
16232    = TREE_CHAIN (parser->unparsed_functions_queues);
16233}
16234
16235/* If DECL contains any default args, remember it on the unparsed
16236   functions queue.  */
16237
16238static void
16239cp_parser_save_default_args (cp_parser* parser, tree decl)
16240{
16241  tree probe;
16242
16243  for (probe = TYPE_ARG_TYPES (TREE_TYPE (decl));
16244       probe;
16245       probe = TREE_CHAIN (probe))
16246    if (TREE_PURPOSE (probe))
16247      {
16248	TREE_PURPOSE (parser->unparsed_functions_queues)
16249	  = tree_cons (current_class_type, decl,
16250		       TREE_PURPOSE (parser->unparsed_functions_queues));
16251	break;
16252      }
16253}
16254
16255/* FN is a FUNCTION_DECL which may contains a parameter with an
16256   unparsed DEFAULT_ARG.  Parse the default args now.  This function
16257   assumes that the current scope is the scope in which the default
16258   argument should be processed.  */
16259
16260static void
16261cp_parser_late_parsing_default_args (cp_parser *parser, tree fn)
16262{
16263  bool saved_local_variables_forbidden_p;
16264  tree parm;
16265
16266  /* While we're parsing the default args, we might (due to the
16267     statement expression extension) encounter more classes.  We want
16268     to handle them right away, but we don't want them getting mixed
16269     up with default args that are currently in the queue.  */
16270  parser->unparsed_functions_queues
16271    = tree_cons (NULL_TREE, NULL_TREE, parser->unparsed_functions_queues);
16272
16273  /* Local variable names (and the `this' keyword) may not appear
16274     in a default argument.  */
16275  saved_local_variables_forbidden_p = parser->local_variables_forbidden_p;
16276  parser->local_variables_forbidden_p = true;
16277
16278  for (parm = TYPE_ARG_TYPES (TREE_TYPE (fn));
16279       parm;
16280       parm = TREE_CHAIN (parm))
16281    {
16282      cp_token_cache *tokens;
16283      tree default_arg = TREE_PURPOSE (parm);
16284      tree parsed_arg;
16285      VEC(tree,gc) *insts;
16286      tree copy;
16287      unsigned ix;
16288
16289      if (!default_arg)
16290	continue;
16291
16292      if (TREE_CODE (default_arg) != DEFAULT_ARG)
16293	/* This can happen for a friend declaration for a function
16294	   already declared with default arguments.  */
16295	continue;
16296
16297       /* Push the saved tokens for the default argument onto the parser's
16298	  lexer stack.  */
16299      tokens = DEFARG_TOKENS (default_arg);
16300      cp_parser_push_lexer_for_tokens (parser, tokens);
16301
16302      /* Parse the assignment-expression.  */
16303      parsed_arg = cp_parser_assignment_expression (parser, /*cast_p=*/false);
16304
16305      if (!processing_template_decl)
16306	parsed_arg = check_default_argument (TREE_VALUE (parm), parsed_arg);
16307
16308      TREE_PURPOSE (parm) = parsed_arg;
16309
16310      /* Update any instantiations we've already created.  */
16311      for (insts = DEFARG_INSTANTIATIONS (default_arg), ix = 0;
16312	   VEC_iterate (tree, insts, ix, copy); ix++)
16313	TREE_PURPOSE (copy) = parsed_arg;
16314
16315      /* If the token stream has not been completely used up, then
16316	 there was extra junk after the end of the default
16317	 argument.  */
16318      if (!cp_lexer_next_token_is (parser->lexer, CPP_EOF))
16319	cp_parser_error (parser, "expected %<,%>");
16320
16321      /* Revert to the main lexer.  */
16322      cp_parser_pop_lexer (parser);
16323    }
16324
16325  /* Make sure no default arg is missing.  */
16326  check_default_args (fn);
16327
16328  /* Restore the state of local_variables_forbidden_p.  */
16329  parser->local_variables_forbidden_p = saved_local_variables_forbidden_p;
16330
16331  /* Restore the queue.  */
16332  parser->unparsed_functions_queues
16333    = TREE_CHAIN (parser->unparsed_functions_queues);
16334}
16335
16336/* Parse the operand of `sizeof' (or a similar operator).  Returns
16337   either a TYPE or an expression, depending on the form of the
16338   input.  The KEYWORD indicates which kind of expression we have
16339   encountered.  */
16340
16341static tree
16342cp_parser_sizeof_operand (cp_parser* parser, enum rid keyword)
16343{
16344  static const char *format;
16345  tree expr = NULL_TREE;
16346  const char *saved_message;
16347  bool saved_integral_constant_expression_p;
16348  bool saved_non_integral_constant_expression_p;
16349
16350  /* Initialize FORMAT the first time we get here.  */
16351  if (!format)
16352    format = "types may not be defined in '%s' expressions";
16353
16354  /* Types cannot be defined in a `sizeof' expression.  Save away the
16355     old message.  */
16356  saved_message = parser->type_definition_forbidden_message;
16357  /* And create the new one.  */
16358  parser->type_definition_forbidden_message
16359    = XNEWVEC (const char, strlen (format)
16360	       + strlen (IDENTIFIER_POINTER (ridpointers[keyword]))
16361	       + 1 /* `\0' */);
16362  sprintf ((char *) parser->type_definition_forbidden_message,
16363	   format, IDENTIFIER_POINTER (ridpointers[keyword]));
16364
16365  /* The restrictions on constant-expressions do not apply inside
16366     sizeof expressions.  */
16367  saved_integral_constant_expression_p
16368    = parser->integral_constant_expression_p;
16369  saved_non_integral_constant_expression_p
16370    = parser->non_integral_constant_expression_p;
16371  parser->integral_constant_expression_p = false;
16372
16373  /* Do not actually evaluate the expression.  */
16374  ++skip_evaluation;
16375  /* If it's a `(', then we might be looking at the type-id
16376     construction.  */
16377  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
16378    {
16379      tree type;
16380      bool saved_in_type_id_in_expr_p;
16381
16382      /* We can't be sure yet whether we're looking at a type-id or an
16383	 expression.  */
16384      cp_parser_parse_tentatively (parser);
16385      /* Consume the `('.  */
16386      cp_lexer_consume_token (parser->lexer);
16387      /* Parse the type-id.  */
16388      saved_in_type_id_in_expr_p = parser->in_type_id_in_expr_p;
16389      parser->in_type_id_in_expr_p = true;
16390      type = cp_parser_type_id (parser);
16391      parser->in_type_id_in_expr_p = saved_in_type_id_in_expr_p;
16392      /* Now, look for the trailing `)'.  */
16393      cp_parser_require (parser, CPP_CLOSE_PAREN, "%<)%>");
16394      /* If all went well, then we're done.  */
16395      if (cp_parser_parse_definitely (parser))
16396	{
16397	  cp_decl_specifier_seq decl_specs;
16398
16399	  /* Build a trivial decl-specifier-seq.  */
16400	  clear_decl_specs (&decl_specs);
16401	  decl_specs.type = type;
16402
16403	  /* Call grokdeclarator to figure out what type this is.  */
16404	  expr = grokdeclarator (NULL,
16405				 &decl_specs,
16406				 TYPENAME,
16407				 /*initialized=*/0,
16408				 /*attrlist=*/NULL);
16409	}
16410    }
16411
16412  /* If the type-id production did not work out, then we must be
16413     looking at the unary-expression production.  */
16414  if (!expr)
16415    expr = cp_parser_unary_expression (parser, /*address_p=*/false,
16416				       /*cast_p=*/false);
16417  /* Go back to evaluating expressions.  */
16418  --skip_evaluation;
16419
16420  /* Free the message we created.  */
16421  free ((char *) parser->type_definition_forbidden_message);
16422  /* And restore the old one.  */
16423  parser->type_definition_forbidden_message = saved_message;
16424  parser->integral_constant_expression_p
16425    = saved_integral_constant_expression_p;
16426  parser->non_integral_constant_expression_p
16427    = saved_non_integral_constant_expression_p;
16428
16429  return expr;
16430}
16431
16432/* If the current declaration has no declarator, return true.  */
16433
16434static bool
16435cp_parser_declares_only_class_p (cp_parser *parser)
16436{
16437  /* If the next token is a `;' or a `,' then there is no
16438     declarator.  */
16439  return (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON)
16440	  || cp_lexer_next_token_is (parser->lexer, CPP_COMMA));
16441}
16442
16443/* Update the DECL_SPECS to reflect the storage class indicated by
16444   KEYWORD.  */
16445
16446static void
16447cp_parser_set_storage_class (cp_parser *parser,
16448			     cp_decl_specifier_seq *decl_specs,
16449			     enum rid keyword)
16450{
16451  cp_storage_class storage_class;
16452
16453  if (parser->in_unbraced_linkage_specification_p)
16454    {
16455      error ("invalid use of %qD in linkage specification",
16456	     ridpointers[keyword]);
16457      return;
16458    }
16459  else if (decl_specs->storage_class != sc_none)
16460    {
16461      decl_specs->conflicting_specifiers_p = true;
16462      return;
16463    }
16464
16465  if ((keyword == RID_EXTERN || keyword == RID_STATIC)
16466      && decl_specs->specs[(int) ds_thread])
16467    {
16468      error ("%<__thread%> before %qD", ridpointers[keyword]);
16469      decl_specs->specs[(int) ds_thread] = 0;
16470    }
16471
16472  switch (keyword)
16473    {
16474    case RID_AUTO:
16475      storage_class = sc_auto;
16476      break;
16477    case RID_REGISTER:
16478      storage_class = sc_register;
16479      break;
16480    case RID_STATIC:
16481      storage_class = sc_static;
16482      break;
16483    case RID_EXTERN:
16484      storage_class = sc_extern;
16485      break;
16486    case RID_MUTABLE:
16487      storage_class = sc_mutable;
16488      break;
16489    default:
16490      gcc_unreachable ();
16491    }
16492  decl_specs->storage_class = storage_class;
16493
16494  /* A storage class specifier cannot be applied alongside a typedef
16495     specifier. If there is a typedef specifier present then set
16496     conflicting_specifiers_p which will trigger an error later
16497     on in grokdeclarator. */
16498  if (decl_specs->specs[(int)ds_typedef])
16499    decl_specs->conflicting_specifiers_p = true;
16500}
16501
16502/* Update the DECL_SPECS to reflect the TYPE_SPEC.  If USER_DEFINED_P
16503   is true, the type is a user-defined type; otherwise it is a
16504   built-in type specified by a keyword.  */
16505
16506static void
16507cp_parser_set_decl_spec_type (cp_decl_specifier_seq *decl_specs,
16508			      tree type_spec,
16509			      bool user_defined_p)
16510{
16511  decl_specs->any_specifiers_p = true;
16512
16513  /* If the user tries to redeclare bool or wchar_t (with, for
16514     example, in "typedef int wchar_t;") we remember that this is what
16515     happened.  In system headers, we ignore these declarations so
16516     that G++ can work with system headers that are not C++-safe.  */
16517  if (decl_specs->specs[(int) ds_typedef]
16518      && !user_defined_p
16519      && (type_spec == boolean_type_node
16520	  || type_spec == wchar_type_node)
16521      && (decl_specs->type
16522	  || decl_specs->specs[(int) ds_long]
16523	  || decl_specs->specs[(int) ds_short]
16524	  || decl_specs->specs[(int) ds_unsigned]
16525	  || decl_specs->specs[(int) ds_signed]))
16526    {
16527      decl_specs->redefined_builtin_type = type_spec;
16528      if (!decl_specs->type)
16529	{
16530	  decl_specs->type = type_spec;
16531	  decl_specs->user_defined_type_p = false;
16532	}
16533    }
16534  else if (decl_specs->type)
16535    decl_specs->multiple_types_p = true;
16536  else
16537    {
16538      decl_specs->type = type_spec;
16539      decl_specs->user_defined_type_p = user_defined_p;
16540      decl_specs->redefined_builtin_type = NULL_TREE;
16541    }
16542}
16543
16544/* DECL_SPECIFIERS is the representation of a decl-specifier-seq.
16545   Returns TRUE iff `friend' appears among the DECL_SPECIFIERS.  */
16546
16547static bool
16548cp_parser_friend_p (const cp_decl_specifier_seq *decl_specifiers)
16549{
16550  return decl_specifiers->specs[(int) ds_friend] != 0;
16551}
16552
16553/* If the next token is of the indicated TYPE, consume it.  Otherwise,
16554   issue an error message indicating that TOKEN_DESC was expected.
16555
16556   Returns the token consumed, if the token had the appropriate type.
16557   Otherwise, returns NULL.  */
16558
16559static cp_token *
16560cp_parser_require (cp_parser* parser,
16561		   enum cpp_ttype type,
16562		   const char* token_desc)
16563{
16564  if (cp_lexer_next_token_is (parser->lexer, type))
16565    return cp_lexer_consume_token (parser->lexer);
16566  else
16567    {
16568      /* Output the MESSAGE -- unless we're parsing tentatively.  */
16569      if (!cp_parser_simulate_error (parser))
16570	{
16571	  char *message = concat ("expected ", token_desc, NULL);
16572	  cp_parser_error (parser, message);
16573	  free (message);
16574	}
16575      return NULL;
16576    }
16577}
16578
16579/* An error message is produced if the next token is not '>'.
16580   All further tokens are skipped until the desired token is
16581   found or '{', '}', ';' or an unbalanced ')' or ']'.  */
16582
16583static void
16584cp_parser_skip_to_end_of_template_parameter_list (cp_parser* parser)
16585{
16586  /* Current level of '< ... >'.  */
16587  unsigned level = 0;
16588  /* Ignore '<' and '>' nested inside '( ... )' or '[ ... ]'.  */
16589  unsigned nesting_depth = 0;
16590
16591  /* Are we ready, yet?  If not, issue error message.  */
16592  if (cp_parser_require (parser, CPP_GREATER, "%<>%>"))
16593    return;
16594
16595  /* Skip tokens until the desired token is found.  */
16596  while (true)
16597    {
16598      /* Peek at the next token.  */
16599      switch (cp_lexer_peek_token (parser->lexer)->type)
16600	{
16601	case CPP_LESS:
16602	  if (!nesting_depth)
16603	    ++level;
16604	  break;
16605
16606	case CPP_GREATER:
16607	  if (!nesting_depth && level-- == 0)
16608	    {
16609	      /* We've reached the token we want, consume it and stop.  */
16610	      cp_lexer_consume_token (parser->lexer);
16611	      return;
16612	    }
16613	  break;
16614
16615	case CPP_OPEN_PAREN:
16616	case CPP_OPEN_SQUARE:
16617	  ++nesting_depth;
16618	  break;
16619
16620	case CPP_CLOSE_PAREN:
16621	case CPP_CLOSE_SQUARE:
16622	  if (nesting_depth-- == 0)
16623	    return;
16624	  break;
16625
16626	case CPP_EOF:
16627	case CPP_PRAGMA_EOL:
16628	case CPP_SEMICOLON:
16629	case CPP_OPEN_BRACE:
16630	case CPP_CLOSE_BRACE:
16631	  /* The '>' was probably forgotten, don't look further.  */
16632	  return;
16633
16634	default:
16635	  break;
16636	}
16637
16638      /* Consume this token.  */
16639      cp_lexer_consume_token (parser->lexer);
16640    }
16641}
16642
16643/* If the next token is the indicated keyword, consume it.  Otherwise,
16644   issue an error message indicating that TOKEN_DESC was expected.
16645
16646   Returns the token consumed, if the token had the appropriate type.
16647   Otherwise, returns NULL.  */
16648
16649static cp_token *
16650cp_parser_require_keyword (cp_parser* parser,
16651			   enum rid keyword,
16652			   const char* token_desc)
16653{
16654  cp_token *token = cp_parser_require (parser, CPP_KEYWORD, token_desc);
16655
16656  if (token && token->keyword != keyword)
16657    {
16658      dyn_string_t error_msg;
16659
16660      /* Format the error message.  */
16661      error_msg = dyn_string_new (0);
16662      dyn_string_append_cstr (error_msg, "expected ");
16663      dyn_string_append_cstr (error_msg, token_desc);
16664      cp_parser_error (parser, error_msg->s);
16665      dyn_string_delete (error_msg);
16666      return NULL;
16667    }
16668
16669  return token;
16670}
16671
16672/* Returns TRUE iff TOKEN is a token that can begin the body of a
16673   function-definition.  */
16674
16675static bool
16676cp_parser_token_starts_function_definition_p (cp_token* token)
16677{
16678  return (/* An ordinary function-body begins with an `{'.  */
16679	  token->type == CPP_OPEN_BRACE
16680	  /* A ctor-initializer begins with a `:'.  */
16681	  || token->type == CPP_COLON
16682	  /* A function-try-block begins with `try'.  */
16683	  || token->keyword == RID_TRY
16684	  /* The named return value extension begins with `return'.  */
16685	  || token->keyword == RID_RETURN);
16686}
16687
16688/* Returns TRUE iff the next token is the ":" or "{" beginning a class
16689   definition.  */
16690
16691static bool
16692cp_parser_next_token_starts_class_definition_p (cp_parser *parser)
16693{
16694  cp_token *token;
16695
16696  token = cp_lexer_peek_token (parser->lexer);
16697  return (token->type == CPP_OPEN_BRACE || token->type == CPP_COLON);
16698}
16699
16700/* Returns TRUE iff the next token is the "," or ">" ending a
16701   template-argument.  */
16702
16703static bool
16704cp_parser_next_token_ends_template_argument_p (cp_parser *parser)
16705{
16706  cp_token *token;
16707
16708  token = cp_lexer_peek_token (parser->lexer);
16709  return (token->type == CPP_COMMA || token->type == CPP_GREATER);
16710}
16711
16712/* Returns TRUE iff the n-th token is a "<", or the n-th is a "[" and the
16713   (n+1)-th is a ":" (which is a possible digraph typo for "< ::").  */
16714
16715static bool
16716cp_parser_nth_token_starts_template_argument_list_p (cp_parser * parser,
16717						     size_t n)
16718{
16719  cp_token *token;
16720
16721  token = cp_lexer_peek_nth_token (parser->lexer, n);
16722  if (token->type == CPP_LESS)
16723    return true;
16724  /* Check for the sequence `<::' in the original code. It would be lexed as
16725     `[:', where `[' is a digraph, and there is no whitespace before
16726     `:'.  */
16727  if (token->type == CPP_OPEN_SQUARE && token->flags & DIGRAPH)
16728    {
16729      cp_token *token2;
16730      token2 = cp_lexer_peek_nth_token (parser->lexer, n+1);
16731      if (token2->type == CPP_COLON && !(token2->flags & PREV_WHITE))
16732	return true;
16733    }
16734  return false;
16735}
16736
16737/* Returns the kind of tag indicated by TOKEN, if it is a class-key,
16738   or none_type otherwise.  */
16739
16740static enum tag_types
16741cp_parser_token_is_class_key (cp_token* token)
16742{
16743  switch (token->keyword)
16744    {
16745    case RID_CLASS:
16746      return class_type;
16747    case RID_STRUCT:
16748      return record_type;
16749    case RID_UNION:
16750      return union_type;
16751
16752    default:
16753      return none_type;
16754    }
16755}
16756
16757/* Issue an error message if the CLASS_KEY does not match the TYPE.  */
16758
16759static void
16760cp_parser_check_class_key (enum tag_types class_key, tree type)
16761{
16762  if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type))
16763    pedwarn ("%qs tag used in naming %q#T",
16764	    class_key == union_type ? "union"
16765	     : class_key == record_type ? "struct" : "class",
16766	     type);
16767}
16768
16769/* Issue an error message if DECL is redeclared with different
16770   access than its original declaration [class.access.spec/3].
16771   This applies to nested classes and nested class templates.
16772   [class.mem/1].  */
16773
16774static void
16775cp_parser_check_access_in_redeclaration (tree decl)
16776{
16777  if (!CLASS_TYPE_P (TREE_TYPE (decl)))
16778    return;
16779
16780  if ((TREE_PRIVATE (decl)
16781       != (current_access_specifier == access_private_node))
16782      || (TREE_PROTECTED (decl)
16783	  != (current_access_specifier == access_protected_node)))
16784    error ("%qD redeclared with different access", decl);
16785}
16786
16787/* Look for the `template' keyword, as a syntactic disambiguator.
16788   Return TRUE iff it is present, in which case it will be
16789   consumed.  */
16790
16791static bool
16792cp_parser_optional_template_keyword (cp_parser *parser)
16793{
16794  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_TEMPLATE))
16795    {
16796      /* The `template' keyword can only be used within templates;
16797	 outside templates the parser can always figure out what is a
16798	 template and what is not.  */
16799      if (!processing_template_decl)
16800	{
16801	  error ("%<template%> (as a disambiguator) is only allowed "
16802		 "within templates");
16803	  /* If this part of the token stream is rescanned, the same
16804	     error message would be generated.  So, we purge the token
16805	     from the stream.  */
16806	  cp_lexer_purge_token (parser->lexer);
16807	  return false;
16808	}
16809      else
16810	{
16811	  /* Consume the `template' keyword.  */
16812	  cp_lexer_consume_token (parser->lexer);
16813	  return true;
16814	}
16815    }
16816
16817  return false;
16818}
16819
16820/* The next token is a CPP_NESTED_NAME_SPECIFIER.  Consume the token,
16821   set PARSER->SCOPE, and perform other related actions.  */
16822
16823static void
16824cp_parser_pre_parsed_nested_name_specifier (cp_parser *parser)
16825{
16826  int i;
16827  struct tree_check *check_value;
16828  deferred_access_check *chk;
16829  VEC (deferred_access_check,gc) *checks;
16830
16831  /* Get the stored value.  */
16832  check_value = cp_lexer_consume_token (parser->lexer)->u.tree_check_value;
16833  /* Perform any access checks that were deferred.  */
16834  checks = check_value->checks;
16835  if (checks)
16836    {
16837      for (i = 0 ;
16838	   VEC_iterate (deferred_access_check, checks, i, chk) ;
16839	   ++i)
16840	{
16841	  perform_or_defer_access_check (chk->binfo,
16842					 chk->decl,
16843					 chk->diag_decl);
16844	}
16845    }
16846  /* Set the scope from the stored value.  */
16847  parser->scope = check_value->value;
16848  parser->qualifying_scope = check_value->qualifying_scope;
16849  parser->object_scope = NULL_TREE;
16850}
16851
16852/* Consume tokens up through a non-nested END token.  */
16853
16854static void
16855cp_parser_cache_group (cp_parser *parser,
16856		       enum cpp_ttype end,
16857		       unsigned depth)
16858{
16859  while (true)
16860    {
16861      cp_token *token;
16862
16863      /* Abort a parenthesized expression if we encounter a brace.  */
16864      if ((end == CPP_CLOSE_PAREN || depth == 0)
16865	  && cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
16866	return;
16867      /* If we've reached the end of the file, stop.  */
16868      if (cp_lexer_next_token_is (parser->lexer, CPP_EOF)
16869	  || (end != CPP_PRAGMA_EOL
16870	      && cp_lexer_next_token_is (parser->lexer, CPP_PRAGMA_EOL)))
16871	return;
16872      /* Consume the next token.  */
16873      token = cp_lexer_consume_token (parser->lexer);
16874      /* See if it starts a new group.  */
16875      if (token->type == CPP_OPEN_BRACE)
16876	{
16877	  cp_parser_cache_group (parser, CPP_CLOSE_BRACE, depth + 1);
16878	  if (depth == 0)
16879	    return;
16880	}
16881      else if (token->type == CPP_OPEN_PAREN)
16882	cp_parser_cache_group (parser, CPP_CLOSE_PAREN, depth + 1);
16883      else if (token->type == CPP_PRAGMA)
16884	cp_parser_cache_group (parser, CPP_PRAGMA_EOL, depth + 1);
16885      else if (token->type == end)
16886	return;
16887    }
16888}
16889
16890/* Begin parsing tentatively.  We always save tokens while parsing
16891   tentatively so that if the tentative parsing fails we can restore the
16892   tokens.  */
16893
16894static void
16895cp_parser_parse_tentatively (cp_parser* parser)
16896{
16897  /* Enter a new parsing context.  */
16898  parser->context = cp_parser_context_new (parser->context);
16899  /* Begin saving tokens.  */
16900  cp_lexer_save_tokens (parser->lexer);
16901  /* In order to avoid repetitive access control error messages,
16902     access checks are queued up until we are no longer parsing
16903     tentatively.  */
16904  push_deferring_access_checks (dk_deferred);
16905}
16906
16907/* Commit to the currently active tentative parse.  */
16908
16909static void
16910cp_parser_commit_to_tentative_parse (cp_parser* parser)
16911{
16912  cp_parser_context *context;
16913  cp_lexer *lexer;
16914
16915  /* Mark all of the levels as committed.  */
16916  lexer = parser->lexer;
16917  for (context = parser->context; context->next; context = context->next)
16918    {
16919      if (context->status == CP_PARSER_STATUS_KIND_COMMITTED)
16920	break;
16921      context->status = CP_PARSER_STATUS_KIND_COMMITTED;
16922      while (!cp_lexer_saving_tokens (lexer))
16923	lexer = lexer->next;
16924      cp_lexer_commit_tokens (lexer);
16925    }
16926}
16927
16928/* Abort the currently active tentative parse.  All consumed tokens
16929   will be rolled back, and no diagnostics will be issued.  */
16930
16931static void
16932cp_parser_abort_tentative_parse (cp_parser* parser)
16933{
16934  cp_parser_simulate_error (parser);
16935  /* Now, pretend that we want to see if the construct was
16936     successfully parsed.  */
16937  cp_parser_parse_definitely (parser);
16938}
16939
16940/* Stop parsing tentatively.  If a parse error has occurred, restore the
16941   token stream.  Otherwise, commit to the tokens we have consumed.
16942   Returns true if no error occurred; false otherwise.  */
16943
16944static bool
16945cp_parser_parse_definitely (cp_parser* parser)
16946{
16947  bool error_occurred;
16948  cp_parser_context *context;
16949
16950  /* Remember whether or not an error occurred, since we are about to
16951     destroy that information.  */
16952  error_occurred = cp_parser_error_occurred (parser);
16953  /* Remove the topmost context from the stack.  */
16954  context = parser->context;
16955  parser->context = context->next;
16956  /* If no parse errors occurred, commit to the tentative parse.  */
16957  if (!error_occurred)
16958    {
16959      /* Commit to the tokens read tentatively, unless that was
16960	 already done.  */
16961      if (context->status != CP_PARSER_STATUS_KIND_COMMITTED)
16962	cp_lexer_commit_tokens (parser->lexer);
16963
16964      pop_to_parent_deferring_access_checks ();
16965    }
16966  /* Otherwise, if errors occurred, roll back our state so that things
16967     are just as they were before we began the tentative parse.  */
16968  else
16969    {
16970      cp_lexer_rollback_tokens (parser->lexer);
16971      pop_deferring_access_checks ();
16972    }
16973  /* Add the context to the front of the free list.  */
16974  context->next = cp_parser_context_free_list;
16975  cp_parser_context_free_list = context;
16976
16977  return !error_occurred;
16978}
16979
16980/* Returns true if we are parsing tentatively and are not committed to
16981   this tentative parse.  */
16982
16983static bool
16984cp_parser_uncommitted_to_tentative_parse_p (cp_parser* parser)
16985{
16986  return (cp_parser_parsing_tentatively (parser)
16987	  && parser->context->status != CP_PARSER_STATUS_KIND_COMMITTED);
16988}
16989
16990/* Returns nonzero iff an error has occurred during the most recent
16991   tentative parse.  */
16992
16993static bool
16994cp_parser_error_occurred (cp_parser* parser)
16995{
16996  return (cp_parser_parsing_tentatively (parser)
16997	  && parser->context->status == CP_PARSER_STATUS_KIND_ERROR);
16998}
16999
17000/* Returns nonzero if GNU extensions are allowed.  */
17001
17002static bool
17003cp_parser_allow_gnu_extensions_p (cp_parser* parser)
17004{
17005  return parser->allow_gnu_extensions_p;
17006}
17007
17008/* Objective-C++ Productions */
17009
17010
17011/* Parse an Objective-C expression, which feeds into a primary-expression
17012   above.
17013
17014   objc-expression:
17015     objc-message-expression
17016     objc-string-literal
17017     objc-encode-expression
17018     objc-protocol-expression
17019     objc-selector-expression
17020
17021  Returns a tree representation of the expression.  */
17022
17023static tree
17024cp_parser_objc_expression (cp_parser* parser)
17025{
17026  /* Try to figure out what kind of declaration is present.  */
17027  cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17028
17029  switch (kwd->type)
17030    {
17031    case CPP_OPEN_SQUARE:
17032      return cp_parser_objc_message_expression (parser);
17033
17034    case CPP_OBJC_STRING:
17035      kwd = cp_lexer_consume_token (parser->lexer);
17036      return objc_build_string_object (kwd->u.value);
17037
17038    case CPP_KEYWORD:
17039      switch (kwd->keyword)
17040	{
17041	case RID_AT_ENCODE:
17042	  return cp_parser_objc_encode_expression (parser);
17043
17044	case RID_AT_PROTOCOL:
17045	  return cp_parser_objc_protocol_expression (parser);
17046
17047	case RID_AT_SELECTOR:
17048	  return cp_parser_objc_selector_expression (parser);
17049
17050	default:
17051	  break;
17052	}
17053    default:
17054      error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
17055      cp_parser_skip_to_end_of_block_or_statement (parser);
17056    }
17057
17058  return error_mark_node;
17059}
17060
17061/* Parse an Objective-C message expression.
17062
17063   objc-message-expression:
17064     [ objc-message-receiver objc-message-args ]
17065
17066   Returns a representation of an Objective-C message.  */
17067
17068static tree
17069cp_parser_objc_message_expression (cp_parser* parser)
17070{
17071  tree receiver, messageargs;
17072
17073  cp_lexer_consume_token (parser->lexer);  /* Eat '['.  */
17074  receiver = cp_parser_objc_message_receiver (parser);
17075  messageargs = cp_parser_objc_message_args (parser);
17076  cp_parser_require (parser, CPP_CLOSE_SQUARE, "`]'");
17077
17078  return objc_build_message_expr (build_tree_list (receiver, messageargs));
17079}
17080
17081/* Parse an objc-message-receiver.
17082
17083   objc-message-receiver:
17084     expression
17085     simple-type-specifier
17086
17087  Returns a representation of the type or expression.  */
17088
17089static tree
17090cp_parser_objc_message_receiver (cp_parser* parser)
17091{
17092  tree rcv;
17093
17094  /* An Objective-C message receiver may be either (1) a type
17095     or (2) an expression.  */
17096  cp_parser_parse_tentatively (parser);
17097  rcv = cp_parser_expression (parser, false);
17098
17099  if (cp_parser_parse_definitely (parser))
17100    return rcv;
17101
17102  rcv = cp_parser_simple_type_specifier (parser,
17103					 /*decl_specs=*/NULL,
17104					 CP_PARSER_FLAGS_NONE);
17105
17106  return objc_get_class_reference (rcv);
17107}
17108
17109/* Parse the arguments and selectors comprising an Objective-C message.
17110
17111   objc-message-args:
17112     objc-selector
17113     objc-selector-args
17114     objc-selector-args , objc-comma-args
17115
17116   objc-selector-args:
17117     objc-selector [opt] : assignment-expression
17118     objc-selector-args objc-selector [opt] : assignment-expression
17119
17120   objc-comma-args:
17121     assignment-expression
17122     objc-comma-args , assignment-expression
17123
17124   Returns a TREE_LIST, with TREE_PURPOSE containing a list of
17125   selector arguments and TREE_VALUE containing a list of comma
17126   arguments.  */
17127
17128static tree
17129cp_parser_objc_message_args (cp_parser* parser)
17130{
17131  tree sel_args = NULL_TREE, addl_args = NULL_TREE;
17132  bool maybe_unary_selector_p = true;
17133  cp_token *token = cp_lexer_peek_token (parser->lexer);
17134
17135  while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17136    {
17137      tree selector = NULL_TREE, arg;
17138
17139      if (token->type != CPP_COLON)
17140	selector = cp_parser_objc_selector (parser);
17141
17142      /* Detect if we have a unary selector.  */
17143      if (maybe_unary_selector_p
17144	  && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17145	return build_tree_list (selector, NULL_TREE);
17146
17147      maybe_unary_selector_p = false;
17148      cp_parser_require (parser, CPP_COLON, "`:'");
17149      arg = cp_parser_assignment_expression (parser, false);
17150
17151      sel_args
17152	= chainon (sel_args,
17153		   build_tree_list (selector, arg));
17154
17155      token = cp_lexer_peek_token (parser->lexer);
17156    }
17157
17158  /* Handle non-selector arguments, if any. */
17159  while (token->type == CPP_COMMA)
17160    {
17161      tree arg;
17162
17163      cp_lexer_consume_token (parser->lexer);
17164      arg = cp_parser_assignment_expression (parser, false);
17165
17166      addl_args
17167	= chainon (addl_args,
17168		   build_tree_list (NULL_TREE, arg));
17169
17170      token = cp_lexer_peek_token (parser->lexer);
17171    }
17172
17173  return build_tree_list (sel_args, addl_args);
17174}
17175
17176/* Parse an Objective-C encode expression.
17177
17178   objc-encode-expression:
17179     @encode objc-typename
17180
17181   Returns an encoded representation of the type argument.  */
17182
17183static tree
17184cp_parser_objc_encode_expression (cp_parser* parser)
17185{
17186  tree type;
17187
17188  cp_lexer_consume_token (parser->lexer);  /* Eat '@encode'.  */
17189  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17190  type = complete_type (cp_parser_type_id (parser));
17191  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17192
17193  if (!type)
17194    {
17195      error ("%<@encode%> must specify a type as an argument");
17196      return error_mark_node;
17197    }
17198
17199  return objc_build_encode_expr (type);
17200}
17201
17202/* Parse an Objective-C @defs expression.  */
17203
17204static tree
17205cp_parser_objc_defs_expression (cp_parser *parser)
17206{
17207  tree name;
17208
17209  cp_lexer_consume_token (parser->lexer);  /* Eat '@defs'.  */
17210  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17211  name = cp_parser_identifier (parser);
17212  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17213
17214  return objc_get_class_ivars (name);
17215}
17216
17217/* Parse an Objective-C protocol expression.
17218
17219  objc-protocol-expression:
17220    @protocol ( identifier )
17221
17222  Returns a representation of the protocol expression.  */
17223
17224static tree
17225cp_parser_objc_protocol_expression (cp_parser* parser)
17226{
17227  tree proto;
17228
17229  cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17230  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17231  proto = cp_parser_identifier (parser);
17232  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17233
17234  return objc_build_protocol_expr (proto);
17235}
17236
17237/* Parse an Objective-C selector expression.
17238
17239   objc-selector-expression:
17240     @selector ( objc-method-signature )
17241
17242   objc-method-signature:
17243     objc-selector
17244     objc-selector-seq
17245
17246   objc-selector-seq:
17247     objc-selector :
17248     objc-selector-seq objc-selector :
17249
17250  Returns a representation of the method selector.  */
17251
17252static tree
17253cp_parser_objc_selector_expression (cp_parser* parser)
17254{
17255  tree sel_seq = NULL_TREE;
17256  bool maybe_unary_selector_p = true;
17257  cp_token *token;
17258
17259  cp_lexer_consume_token (parser->lexer);  /* Eat '@selector'.  */
17260  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
17261  token = cp_lexer_peek_token (parser->lexer);
17262
17263  while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
17264	 || token->type == CPP_SCOPE)
17265    {
17266      tree selector = NULL_TREE;
17267
17268      if (token->type != CPP_COLON
17269	  || token->type == CPP_SCOPE)
17270	selector = cp_parser_objc_selector (parser);
17271
17272      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
17273	  && cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
17274	{
17275	  /* Detect if we have a unary selector.  */
17276	  if (maybe_unary_selector_p)
17277	    {
17278	      sel_seq = selector;
17279	      goto finish_selector;
17280	    }
17281	  else
17282	    {
17283	      cp_parser_error (parser, "expected %<:%>");
17284	    }
17285	}
17286      maybe_unary_selector_p = false;
17287      token = cp_lexer_consume_token (parser->lexer);
17288
17289      if (token->type == CPP_SCOPE)
17290	{
17291	  sel_seq
17292	    = chainon (sel_seq,
17293		       build_tree_list (selector, NULL_TREE));
17294	  sel_seq
17295	    = chainon (sel_seq,
17296		       build_tree_list (NULL_TREE, NULL_TREE));
17297	}
17298      else
17299	sel_seq
17300	  = chainon (sel_seq,
17301		     build_tree_list (selector, NULL_TREE));
17302
17303      token = cp_lexer_peek_token (parser->lexer);
17304    }
17305
17306 finish_selector:
17307  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17308
17309  return objc_build_selector_expr (sel_seq);
17310}
17311
17312/* Parse a list of identifiers.
17313
17314   objc-identifier-list:
17315     identifier
17316     objc-identifier-list , identifier
17317
17318   Returns a TREE_LIST of identifier nodes.  */
17319
17320static tree
17321cp_parser_objc_identifier_list (cp_parser* parser)
17322{
17323  tree list = build_tree_list (NULL_TREE, cp_parser_identifier (parser));
17324  cp_token *sep = cp_lexer_peek_token (parser->lexer);
17325
17326  while (sep->type == CPP_COMMA)
17327    {
17328      cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17329      list = chainon (list,
17330		      build_tree_list (NULL_TREE,
17331				       cp_parser_identifier (parser)));
17332      sep = cp_lexer_peek_token (parser->lexer);
17333    }
17334
17335  return list;
17336}
17337
17338/* Parse an Objective-C alias declaration.
17339
17340   objc-alias-declaration:
17341     @compatibility_alias identifier identifier ;
17342
17343   This function registers the alias mapping with the Objective-C front-end.
17344   It returns nothing.  */
17345
17346static void
17347cp_parser_objc_alias_declaration (cp_parser* parser)
17348{
17349  tree alias, orig;
17350
17351  cp_lexer_consume_token (parser->lexer);  /* Eat '@compatibility_alias'.  */
17352  alias = cp_parser_identifier (parser);
17353  orig = cp_parser_identifier (parser);
17354  objc_declare_alias (alias, orig);
17355  cp_parser_consume_semicolon_at_end_of_statement (parser);
17356}
17357
17358/* Parse an Objective-C class forward-declaration.
17359
17360   objc-class-declaration:
17361     @class objc-identifier-list ;
17362
17363   The function registers the forward declarations with the Objective-C
17364   front-end.  It returns nothing.  */
17365
17366static void
17367cp_parser_objc_class_declaration (cp_parser* parser)
17368{
17369  cp_lexer_consume_token (parser->lexer);  /* Eat '@class'.  */
17370  objc_declare_class (cp_parser_objc_identifier_list (parser));
17371  cp_parser_consume_semicolon_at_end_of_statement (parser);
17372}
17373
17374/* Parse a list of Objective-C protocol references.
17375
17376   objc-protocol-refs-opt:
17377     objc-protocol-refs [opt]
17378
17379   objc-protocol-refs:
17380     < objc-identifier-list >
17381
17382   Returns a TREE_LIST of identifiers, if any.  */
17383
17384static tree
17385cp_parser_objc_protocol_refs_opt (cp_parser* parser)
17386{
17387  tree protorefs = NULL_TREE;
17388
17389  if(cp_lexer_next_token_is (parser->lexer, CPP_LESS))
17390    {
17391      cp_lexer_consume_token (parser->lexer);  /* Eat '<'.  */
17392      protorefs = cp_parser_objc_identifier_list (parser);
17393      cp_parser_require (parser, CPP_GREATER, "`>'");
17394    }
17395
17396  return protorefs;
17397}
17398
17399/* Parse a Objective-C visibility specification.  */
17400
17401static void
17402cp_parser_objc_visibility_spec (cp_parser* parser)
17403{
17404  cp_token *vis = cp_lexer_peek_token (parser->lexer);
17405
17406  switch (vis->keyword)
17407    {
17408    case RID_AT_PRIVATE:
17409      objc_set_visibility (2);
17410      break;
17411    case RID_AT_PROTECTED:
17412      objc_set_visibility (0);
17413      break;
17414    case RID_AT_PUBLIC:
17415      objc_set_visibility (1);
17416      break;
17417    default:
17418      return;
17419    }
17420
17421  /* Eat '@private'/'@protected'/'@public'.  */
17422  cp_lexer_consume_token (parser->lexer);
17423}
17424
17425/* Parse an Objective-C method type.  */
17426
17427static void
17428cp_parser_objc_method_type (cp_parser* parser)
17429{
17430  objc_set_method_type
17431   (cp_lexer_consume_token (parser->lexer)->type == CPP_PLUS
17432    ? PLUS_EXPR
17433    : MINUS_EXPR);
17434}
17435
17436/* Parse an Objective-C protocol qualifier.  */
17437
17438static tree
17439cp_parser_objc_protocol_qualifiers (cp_parser* parser)
17440{
17441  tree quals = NULL_TREE, node;
17442  cp_token *token = cp_lexer_peek_token (parser->lexer);
17443
17444  node = token->u.value;
17445
17446  while (node && TREE_CODE (node) == IDENTIFIER_NODE
17447	 && (node == ridpointers [(int) RID_IN]
17448	     || node == ridpointers [(int) RID_OUT]
17449	     || node == ridpointers [(int) RID_INOUT]
17450	     || node == ridpointers [(int) RID_BYCOPY]
17451	     || node == ridpointers [(int) RID_BYREF]
17452	     || node == ridpointers [(int) RID_ONEWAY]))
17453    {
17454      quals = tree_cons (NULL_TREE, node, quals);
17455      cp_lexer_consume_token (parser->lexer);
17456      token = cp_lexer_peek_token (parser->lexer);
17457      node = token->u.value;
17458    }
17459
17460  return quals;
17461}
17462
17463/* Parse an Objective-C typename.  */
17464
17465static tree
17466cp_parser_objc_typename (cp_parser* parser)
17467{
17468  tree typename = NULL_TREE;
17469
17470  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
17471    {
17472      tree proto_quals, cp_type = NULL_TREE;
17473
17474      cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17475      proto_quals = cp_parser_objc_protocol_qualifiers (parser);
17476
17477      /* An ObjC type name may consist of just protocol qualifiers, in which
17478	 case the type shall default to 'id'.  */
17479      if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
17480	cp_type = cp_parser_type_id (parser);
17481
17482      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17483      typename = build_tree_list (proto_quals, cp_type);
17484    }
17485
17486  return typename;
17487}
17488
17489/* Check to see if TYPE refers to an Objective-C selector name.  */
17490
17491static bool
17492cp_parser_objc_selector_p (enum cpp_ttype type)
17493{
17494  return (type == CPP_NAME || type == CPP_KEYWORD
17495	  || type == CPP_AND_AND || type == CPP_AND_EQ || type == CPP_AND
17496	  || type == CPP_OR || type == CPP_COMPL || type == CPP_NOT
17497	  || type == CPP_NOT_EQ || type == CPP_OR_OR || type == CPP_OR_EQ
17498	  || type == CPP_XOR || type == CPP_XOR_EQ);
17499}
17500
17501/* Parse an Objective-C selector.  */
17502
17503static tree
17504cp_parser_objc_selector (cp_parser* parser)
17505{
17506  cp_token *token = cp_lexer_consume_token (parser->lexer);
17507
17508  if (!cp_parser_objc_selector_p (token->type))
17509    {
17510      error ("invalid Objective-C++ selector name");
17511      return error_mark_node;
17512    }
17513
17514  /* C++ operator names are allowed to appear in ObjC selectors.  */
17515  switch (token->type)
17516    {
17517    case CPP_AND_AND: return get_identifier ("and");
17518    case CPP_AND_EQ: return get_identifier ("and_eq");
17519    case CPP_AND: return get_identifier ("bitand");
17520    case CPP_OR: return get_identifier ("bitor");
17521    case CPP_COMPL: return get_identifier ("compl");
17522    case CPP_NOT: return get_identifier ("not");
17523    case CPP_NOT_EQ: return get_identifier ("not_eq");
17524    case CPP_OR_OR: return get_identifier ("or");
17525    case CPP_OR_EQ: return get_identifier ("or_eq");
17526    case CPP_XOR: return get_identifier ("xor");
17527    case CPP_XOR_EQ: return get_identifier ("xor_eq");
17528    default: return token->u.value;
17529    }
17530}
17531
17532/* Parse an Objective-C params list.  */
17533
17534static tree
17535cp_parser_objc_method_keyword_params (cp_parser* parser)
17536{
17537  tree params = NULL_TREE;
17538  bool maybe_unary_selector_p = true;
17539  cp_token *token = cp_lexer_peek_token (parser->lexer);
17540
17541  while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
17542    {
17543      tree selector = NULL_TREE, typename, identifier;
17544
17545      if (token->type != CPP_COLON)
17546	selector = cp_parser_objc_selector (parser);
17547
17548      /* Detect if we have a unary selector.  */
17549      if (maybe_unary_selector_p
17550	  && cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
17551	return selector;
17552
17553      maybe_unary_selector_p = false;
17554      cp_parser_require (parser, CPP_COLON, "`:'");
17555      typename = cp_parser_objc_typename (parser);
17556      identifier = cp_parser_identifier (parser);
17557
17558      params
17559	= chainon (params,
17560		   objc_build_keyword_decl (selector,
17561					    typename,
17562					    identifier));
17563
17564      token = cp_lexer_peek_token (parser->lexer);
17565    }
17566
17567  return params;
17568}
17569
17570/* Parse the non-keyword Objective-C params.  */
17571
17572static tree
17573cp_parser_objc_method_tail_params_opt (cp_parser* parser, bool *ellipsisp)
17574{
17575  tree params = make_node (TREE_LIST);
17576  cp_token *token = cp_lexer_peek_token (parser->lexer);
17577  *ellipsisp = false;  /* Initially, assume no ellipsis.  */
17578
17579  while (token->type == CPP_COMMA)
17580    {
17581      cp_parameter_declarator *parmdecl;
17582      tree parm;
17583
17584      cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17585      token = cp_lexer_peek_token (parser->lexer);
17586
17587      if (token->type == CPP_ELLIPSIS)
17588	{
17589	  cp_lexer_consume_token (parser->lexer);  /* Eat '...'.  */
17590	  *ellipsisp = true;
17591	  break;
17592	}
17593
17594      parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
17595      parm = grokdeclarator (parmdecl->declarator,
17596			     &parmdecl->decl_specifiers,
17597			     PARM, /*initialized=*/0,
17598			     /*attrlist=*/NULL);
17599
17600      chainon (params, build_tree_list (NULL_TREE, parm));
17601      token = cp_lexer_peek_token (parser->lexer);
17602    }
17603
17604  return params;
17605}
17606
17607/* Parse a linkage specification, a pragma, an extra semicolon or a block.  */
17608
17609static void
17610cp_parser_objc_interstitial_code (cp_parser* parser)
17611{
17612  cp_token *token = cp_lexer_peek_token (parser->lexer);
17613
17614  /* If the next token is `extern' and the following token is a string
17615     literal, then we have a linkage specification.  */
17616  if (token->keyword == RID_EXTERN
17617      && cp_parser_is_string_literal (cp_lexer_peek_nth_token (parser->lexer, 2)))
17618    cp_parser_linkage_specification (parser);
17619  /* Handle #pragma, if any.  */
17620  else if (token->type == CPP_PRAGMA)
17621    cp_parser_pragma (parser, pragma_external);
17622  /* Allow stray semicolons.  */
17623  else if (token->type == CPP_SEMICOLON)
17624    cp_lexer_consume_token (parser->lexer);
17625  /* Finally, try to parse a block-declaration, or a function-definition.  */
17626  else
17627    cp_parser_block_declaration (parser, /*statement_p=*/false);
17628}
17629
17630/* Parse a method signature.  */
17631
17632static tree
17633cp_parser_objc_method_signature (cp_parser* parser)
17634{
17635  tree rettype, kwdparms, optparms;
17636  bool ellipsis = false;
17637
17638  cp_parser_objc_method_type (parser);
17639  rettype = cp_parser_objc_typename (parser);
17640  kwdparms = cp_parser_objc_method_keyword_params (parser);
17641  optparms = cp_parser_objc_method_tail_params_opt (parser, &ellipsis);
17642
17643  return objc_build_method_signature (rettype, kwdparms, optparms, ellipsis);
17644}
17645
17646/* Pars an Objective-C method prototype list.  */
17647
17648static void
17649cp_parser_objc_method_prototype_list (cp_parser* parser)
17650{
17651  cp_token *token = cp_lexer_peek_token (parser->lexer);
17652
17653  while (token->keyword != RID_AT_END)
17654    {
17655      if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17656	{
17657	  objc_add_method_declaration
17658	   (cp_parser_objc_method_signature (parser));
17659	  cp_parser_consume_semicolon_at_end_of_statement (parser);
17660	}
17661      else
17662	/* Allow for interspersed non-ObjC++ code.  */
17663	cp_parser_objc_interstitial_code (parser);
17664
17665      token = cp_lexer_peek_token (parser->lexer);
17666    }
17667
17668  cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17669  objc_finish_interface ();
17670}
17671
17672/* Parse an Objective-C method definition list.  */
17673
17674static void
17675cp_parser_objc_method_definition_list (cp_parser* parser)
17676{
17677  cp_token *token = cp_lexer_peek_token (parser->lexer);
17678
17679  while (token->keyword != RID_AT_END)
17680    {
17681      tree meth;
17682
17683      if (token->type == CPP_PLUS || token->type == CPP_MINUS)
17684	{
17685	  push_deferring_access_checks (dk_deferred);
17686	  objc_start_method_definition
17687	   (cp_parser_objc_method_signature (parser));
17688
17689	  /* For historical reasons, we accept an optional semicolon.  */
17690	  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17691	    cp_lexer_consume_token (parser->lexer);
17692
17693	  perform_deferred_access_checks ();
17694	  stop_deferring_access_checks ();
17695	  meth = cp_parser_function_definition_after_declarator (parser,
17696								 false);
17697	  pop_deferring_access_checks ();
17698	  objc_finish_method_definition (meth);
17699	}
17700      else
17701	/* Allow for interspersed non-ObjC++ code.  */
17702	cp_parser_objc_interstitial_code (parser);
17703
17704      token = cp_lexer_peek_token (parser->lexer);
17705    }
17706
17707  cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17708  objc_finish_implementation ();
17709}
17710
17711/* Parse Objective-C ivars.  */
17712
17713static void
17714cp_parser_objc_class_ivars (cp_parser* parser)
17715{
17716  cp_token *token = cp_lexer_peek_token (parser->lexer);
17717
17718  if (token->type != CPP_OPEN_BRACE)
17719    return;	/* No ivars specified.  */
17720
17721  cp_lexer_consume_token (parser->lexer);  /* Eat '{'.  */
17722  token = cp_lexer_peek_token (parser->lexer);
17723
17724  while (token->type != CPP_CLOSE_BRACE)
17725    {
17726      cp_decl_specifier_seq declspecs;
17727      int decl_class_or_enum_p;
17728      tree prefix_attributes;
17729
17730      cp_parser_objc_visibility_spec (parser);
17731
17732      if (cp_lexer_next_token_is (parser->lexer, CPP_CLOSE_BRACE))
17733	break;
17734
17735      cp_parser_decl_specifier_seq (parser,
17736				    CP_PARSER_FLAGS_OPTIONAL,
17737				    &declspecs,
17738				    &decl_class_or_enum_p);
17739      prefix_attributes = declspecs.attributes;
17740      declspecs.attributes = NULL_TREE;
17741
17742      /* Keep going until we hit the `;' at the end of the
17743	 declaration.  */
17744      while (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
17745	{
17746	  tree width = NULL_TREE, attributes, first_attribute, decl;
17747	  cp_declarator *declarator = NULL;
17748	  int ctor_dtor_or_conv_p;
17749
17750	  /* Check for a (possibly unnamed) bitfield declaration.  */
17751	  token = cp_lexer_peek_token (parser->lexer);
17752	  if (token->type == CPP_COLON)
17753	    goto eat_colon;
17754
17755	  if (token->type == CPP_NAME
17756	      && (cp_lexer_peek_nth_token (parser->lexer, 2)->type
17757		  == CPP_COLON))
17758	    {
17759	      /* Get the name of the bitfield.  */
17760	      declarator = make_id_declarator (NULL_TREE,
17761					       cp_parser_identifier (parser),
17762					       sfk_none);
17763
17764	     eat_colon:
17765	      cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17766	      /* Get the width of the bitfield.  */
17767	      width
17768		= cp_parser_constant_expression (parser,
17769						 /*allow_non_constant=*/false,
17770						 NULL);
17771	    }
17772	  else
17773	    {
17774	      /* Parse the declarator.  */
17775	      declarator
17776		= cp_parser_declarator (parser, CP_PARSER_DECLARATOR_NAMED,
17777					&ctor_dtor_or_conv_p,
17778					/*parenthesized_p=*/NULL,
17779					/*member_p=*/false);
17780	    }
17781
17782	  /* Look for attributes that apply to the ivar.  */
17783	  attributes = cp_parser_attributes_opt (parser);
17784	  /* Remember which attributes are prefix attributes and
17785	     which are not.  */
17786	  first_attribute = attributes;
17787	  /* Combine the attributes.  */
17788	  attributes = chainon (prefix_attributes, attributes);
17789
17790	  if (width)
17791	    {
17792	      /* Create the bitfield declaration.  */
17793	      decl = grokbitfield (declarator, &declspecs, width);
17794	      cplus_decl_attributes (&decl, attributes, /*flags=*/0);
17795	    }
17796	  else
17797	    decl = grokfield (declarator, &declspecs,
17798			      NULL_TREE, /*init_const_expr_p=*/false,
17799			      NULL_TREE, attributes);
17800
17801	  /* Add the instance variable.  */
17802	  objc_add_instance_variable (decl);
17803
17804	  /* Reset PREFIX_ATTRIBUTES.  */
17805	  while (attributes && TREE_CHAIN (attributes) != first_attribute)
17806	    attributes = TREE_CHAIN (attributes);
17807	  if (attributes)
17808	    TREE_CHAIN (attributes) = NULL_TREE;
17809
17810	  token = cp_lexer_peek_token (parser->lexer);
17811
17812	  if (token->type == CPP_COMMA)
17813	    {
17814	      cp_lexer_consume_token (parser->lexer);  /* Eat ','.  */
17815	      continue;
17816	    }
17817	  break;
17818	}
17819
17820      cp_parser_consume_semicolon_at_end_of_statement (parser);
17821      token = cp_lexer_peek_token (parser->lexer);
17822    }
17823
17824  cp_lexer_consume_token (parser->lexer);  /* Eat '}'.  */
17825  /* For historical reasons, we accept an optional semicolon.  */
17826  if (cp_lexer_next_token_is (parser->lexer, CPP_SEMICOLON))
17827    cp_lexer_consume_token (parser->lexer);
17828}
17829
17830/* Parse an Objective-C protocol declaration.  */
17831
17832static void
17833cp_parser_objc_protocol_declaration (cp_parser* parser)
17834{
17835  tree proto, protorefs;
17836  cp_token *tok;
17837
17838  cp_lexer_consume_token (parser->lexer);  /* Eat '@protocol'.  */
17839  if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME))
17840    {
17841      error ("identifier expected after %<@protocol%>");
17842      goto finish;
17843    }
17844
17845  /* See if we have a forward declaration or a definition.  */
17846  tok = cp_lexer_peek_nth_token (parser->lexer, 2);
17847
17848  /* Try a forward declaration first.  */
17849  if (tok->type == CPP_COMMA || tok->type == CPP_SEMICOLON)
17850    {
17851      objc_declare_protocols (cp_parser_objc_identifier_list (parser));
17852     finish:
17853      cp_parser_consume_semicolon_at_end_of_statement (parser);
17854    }
17855
17856  /* Ok, we got a full-fledged definition (or at least should).  */
17857  else
17858    {
17859      proto = cp_parser_identifier (parser);
17860      protorefs = cp_parser_objc_protocol_refs_opt (parser);
17861      objc_start_protocol (proto, protorefs);
17862      cp_parser_objc_method_prototype_list (parser);
17863    }
17864}
17865
17866/* Parse an Objective-C superclass or category.  */
17867
17868static void
17869cp_parser_objc_superclass_or_category (cp_parser *parser, tree *super,
17870							  tree *categ)
17871{
17872  cp_token *next = cp_lexer_peek_token (parser->lexer);
17873
17874  *super = *categ = NULL_TREE;
17875  if (next->type == CPP_COLON)
17876    {
17877      cp_lexer_consume_token (parser->lexer);  /* Eat ':'.  */
17878      *super = cp_parser_identifier (parser);
17879    }
17880  else if (next->type == CPP_OPEN_PAREN)
17881    {
17882      cp_lexer_consume_token (parser->lexer);  /* Eat '('.  */
17883      *categ = cp_parser_identifier (parser);
17884      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
17885    }
17886}
17887
17888/* Parse an Objective-C class interface.  */
17889
17890static void
17891cp_parser_objc_class_interface (cp_parser* parser)
17892{
17893  tree name, super, categ, protos;
17894
17895  cp_lexer_consume_token (parser->lexer);  /* Eat '@interface'.  */
17896  name = cp_parser_identifier (parser);
17897  cp_parser_objc_superclass_or_category (parser, &super, &categ);
17898  protos = cp_parser_objc_protocol_refs_opt (parser);
17899
17900  /* We have either a class or a category on our hands.  */
17901  if (categ)
17902    objc_start_category_interface (name, categ, protos);
17903  else
17904    {
17905      objc_start_class_interface (name, super, protos);
17906      /* Handle instance variable declarations, if any.  */
17907      cp_parser_objc_class_ivars (parser);
17908      objc_continue_interface ();
17909    }
17910
17911  cp_parser_objc_method_prototype_list (parser);
17912}
17913
17914/* Parse an Objective-C class implementation.  */
17915
17916static void
17917cp_parser_objc_class_implementation (cp_parser* parser)
17918{
17919  tree name, super, categ;
17920
17921  cp_lexer_consume_token (parser->lexer);  /* Eat '@implementation'.  */
17922  name = cp_parser_identifier (parser);
17923  cp_parser_objc_superclass_or_category (parser, &super, &categ);
17924
17925  /* We have either a class or a category on our hands.  */
17926  if (categ)
17927    objc_start_category_implementation (name, categ);
17928  else
17929    {
17930      objc_start_class_implementation (name, super);
17931      /* Handle instance variable declarations, if any.  */
17932      cp_parser_objc_class_ivars (parser);
17933      objc_continue_implementation ();
17934    }
17935
17936  cp_parser_objc_method_definition_list (parser);
17937}
17938
17939/* Consume the @end token and finish off the implementation.  */
17940
17941static void
17942cp_parser_objc_end_implementation (cp_parser* parser)
17943{
17944  cp_lexer_consume_token (parser->lexer);  /* Eat '@end'.  */
17945  objc_finish_implementation ();
17946}
17947
17948/* Parse an Objective-C declaration.  */
17949
17950static void
17951cp_parser_objc_declaration (cp_parser* parser)
17952{
17953  /* Try to figure out what kind of declaration is present.  */
17954  cp_token *kwd = cp_lexer_peek_token (parser->lexer);
17955
17956  switch (kwd->keyword)
17957    {
17958    case RID_AT_ALIAS:
17959      cp_parser_objc_alias_declaration (parser);
17960      break;
17961    case RID_AT_CLASS:
17962      cp_parser_objc_class_declaration (parser);
17963      break;
17964    case RID_AT_PROTOCOL:
17965      cp_parser_objc_protocol_declaration (parser);
17966      break;
17967    case RID_AT_INTERFACE:
17968      cp_parser_objc_class_interface (parser);
17969      break;
17970    case RID_AT_IMPLEMENTATION:
17971      cp_parser_objc_class_implementation (parser);
17972      break;
17973    case RID_AT_END:
17974      cp_parser_objc_end_implementation (parser);
17975      break;
17976    default:
17977      error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
17978      cp_parser_skip_to_end_of_block_or_statement (parser);
17979    }
17980}
17981
17982/* Parse an Objective-C try-catch-finally statement.
17983
17984   objc-try-catch-finally-stmt:
17985     @try compound-statement objc-catch-clause-seq [opt]
17986       objc-finally-clause [opt]
17987
17988   objc-catch-clause-seq:
17989     objc-catch-clause objc-catch-clause-seq [opt]
17990
17991   objc-catch-clause:
17992     @catch ( exception-declaration ) compound-statement
17993
17994   objc-finally-clause
17995     @finally compound-statement
17996
17997   Returns NULL_TREE.  */
17998
17999static tree
18000cp_parser_objc_try_catch_finally_statement (cp_parser *parser) {
18001  location_t location;
18002  tree stmt;
18003
18004  cp_parser_require_keyword (parser, RID_AT_TRY, "`@try'");
18005  location = cp_lexer_peek_token (parser->lexer)->location;
18006  /* NB: The @try block needs to be wrapped in its own STATEMENT_LIST
18007     node, lest it get absorbed into the surrounding block.  */
18008  stmt = push_stmt_list ();
18009  cp_parser_compound_statement (parser, NULL, false);
18010  objc_begin_try_stmt (location, pop_stmt_list (stmt));
18011
18012  while (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_CATCH))
18013    {
18014      cp_parameter_declarator *parmdecl;
18015      tree parm;
18016
18017      cp_lexer_consume_token (parser->lexer);
18018      cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
18019      parmdecl = cp_parser_parameter_declaration (parser, false, NULL);
18020      parm = grokdeclarator (parmdecl->declarator,
18021			     &parmdecl->decl_specifiers,
18022			     PARM, /*initialized=*/0,
18023			     /*attrlist=*/NULL);
18024      cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18025      objc_begin_catch_clause (parm);
18026      cp_parser_compound_statement (parser, NULL, false);
18027      objc_finish_catch_clause ();
18028    }
18029
18030  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_AT_FINALLY))
18031    {
18032      cp_lexer_consume_token (parser->lexer);
18033      location = cp_lexer_peek_token (parser->lexer)->location;
18034      /* NB: The @finally block needs to be wrapped in its own STATEMENT_LIST
18035	 node, lest it get absorbed into the surrounding block.  */
18036      stmt = push_stmt_list ();
18037      cp_parser_compound_statement (parser, NULL, false);
18038      objc_build_finally_clause (location, pop_stmt_list (stmt));
18039    }
18040
18041  return objc_finish_try_stmt ();
18042}
18043
18044/* Parse an Objective-C synchronized statement.
18045
18046   objc-synchronized-stmt:
18047     @synchronized ( expression ) compound-statement
18048
18049   Returns NULL_TREE.  */
18050
18051static tree
18052cp_parser_objc_synchronized_statement (cp_parser *parser) {
18053  location_t location;
18054  tree lock, stmt;
18055
18056  cp_parser_require_keyword (parser, RID_AT_SYNCHRONIZED, "`@synchronized'");
18057
18058  location = cp_lexer_peek_token (parser->lexer)->location;
18059  cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
18060  lock = cp_parser_expression (parser, false);
18061  cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'");
18062
18063  /* NB: The @synchronized block needs to be wrapped in its own STATEMENT_LIST
18064     node, lest it get absorbed into the surrounding block.  */
18065  stmt = push_stmt_list ();
18066  cp_parser_compound_statement (parser, NULL, false);
18067
18068  return objc_build_synchronized (location, lock, pop_stmt_list (stmt));
18069}
18070
18071/* Parse an Objective-C throw statement.
18072
18073   objc-throw-stmt:
18074     @throw assignment-expression [opt] ;
18075
18076   Returns a constructed '@throw' statement.  */
18077
18078static tree
18079cp_parser_objc_throw_statement (cp_parser *parser) {
18080  tree expr = NULL_TREE;
18081
18082  cp_parser_require_keyword (parser, RID_AT_THROW, "`@throw'");
18083
18084  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18085    expr = cp_parser_assignment_expression (parser, false);
18086
18087  cp_parser_consume_semicolon_at_end_of_statement (parser);
18088
18089  return objc_build_throw_stmt (expr);
18090}
18091
18092/* Parse an Objective-C statement.  */
18093
18094static tree
18095cp_parser_objc_statement (cp_parser * parser) {
18096  /* Try to figure out what kind of declaration is present.  */
18097  cp_token *kwd = cp_lexer_peek_token (parser->lexer);
18098
18099  switch (kwd->keyword)
18100    {
18101    case RID_AT_TRY:
18102      return cp_parser_objc_try_catch_finally_statement (parser);
18103    case RID_AT_SYNCHRONIZED:
18104      return cp_parser_objc_synchronized_statement (parser);
18105    case RID_AT_THROW:
18106      return cp_parser_objc_throw_statement (parser);
18107    default:
18108      error ("misplaced %<@%D%> Objective-C++ construct", kwd->u.value);
18109      cp_parser_skip_to_end_of_block_or_statement (parser);
18110    }
18111
18112  return error_mark_node;
18113}
18114
18115/* OpenMP 2.5 parsing routines.  */
18116
18117/* All OpenMP clauses.  OpenMP 2.5.  */
18118typedef enum pragma_omp_clause {
18119  PRAGMA_OMP_CLAUSE_NONE = 0,
18120
18121  PRAGMA_OMP_CLAUSE_COPYIN,
18122  PRAGMA_OMP_CLAUSE_COPYPRIVATE,
18123  PRAGMA_OMP_CLAUSE_DEFAULT,
18124  PRAGMA_OMP_CLAUSE_FIRSTPRIVATE,
18125  PRAGMA_OMP_CLAUSE_IF,
18126  PRAGMA_OMP_CLAUSE_LASTPRIVATE,
18127  PRAGMA_OMP_CLAUSE_NOWAIT,
18128  PRAGMA_OMP_CLAUSE_NUM_THREADS,
18129  PRAGMA_OMP_CLAUSE_ORDERED,
18130  PRAGMA_OMP_CLAUSE_PRIVATE,
18131  PRAGMA_OMP_CLAUSE_REDUCTION,
18132  PRAGMA_OMP_CLAUSE_SCHEDULE,
18133  PRAGMA_OMP_CLAUSE_SHARED
18134} pragma_omp_clause;
18135
18136/* Returns name of the next clause.
18137   If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
18138   the token is not consumed.  Otherwise appropriate pragma_omp_clause is
18139   returned and the token is consumed.  */
18140
18141static pragma_omp_clause
18142cp_parser_omp_clause_name (cp_parser *parser)
18143{
18144  pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
18145
18146  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_IF))
18147    result = PRAGMA_OMP_CLAUSE_IF;
18148  else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_DEFAULT))
18149    result = PRAGMA_OMP_CLAUSE_DEFAULT;
18150  else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_PRIVATE))
18151    result = PRAGMA_OMP_CLAUSE_PRIVATE;
18152  else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18153    {
18154      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18155      const char *p = IDENTIFIER_POINTER (id);
18156
18157      switch (p[0])
18158	{
18159	case 'c':
18160	  if (!strcmp ("copyin", p))
18161	    result = PRAGMA_OMP_CLAUSE_COPYIN;
18162	  else if (!strcmp ("copyprivate", p))
18163	    result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
18164	  break;
18165	case 'f':
18166	  if (!strcmp ("firstprivate", p))
18167	    result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
18168	  break;
18169	case 'l':
18170	  if (!strcmp ("lastprivate", p))
18171	    result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
18172	  break;
18173	case 'n':
18174	  if (!strcmp ("nowait", p))
18175	    result = PRAGMA_OMP_CLAUSE_NOWAIT;
18176	  else if (!strcmp ("num_threads", p))
18177	    result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
18178	  break;
18179	case 'o':
18180	  if (!strcmp ("ordered", p))
18181	    result = PRAGMA_OMP_CLAUSE_ORDERED;
18182	  break;
18183	case 'r':
18184	  if (!strcmp ("reduction", p))
18185	    result = PRAGMA_OMP_CLAUSE_REDUCTION;
18186	  break;
18187	case 's':
18188	  if (!strcmp ("schedule", p))
18189	    result = PRAGMA_OMP_CLAUSE_SCHEDULE;
18190	  else if (!strcmp ("shared", p))
18191	    result = PRAGMA_OMP_CLAUSE_SHARED;
18192	  break;
18193	}
18194    }
18195
18196  if (result != PRAGMA_OMP_CLAUSE_NONE)
18197    cp_lexer_consume_token (parser->lexer);
18198
18199  return result;
18200}
18201
18202/* Validate that a clause of the given type does not already exist.  */
18203
18204static void
18205check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
18206{
18207  tree c;
18208
18209  for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
18210    if (OMP_CLAUSE_CODE (c) == code)
18211      {
18212	error ("too many %qs clauses", name);
18213	break;
18214      }
18215}
18216
18217/* OpenMP 2.5:
18218   variable-list:
18219     identifier
18220     variable-list , identifier
18221
18222   In addition, we match a closing parenthesis.  An opening parenthesis
18223   will have been consumed by the caller.
18224
18225   If KIND is nonzero, create the appropriate node and install the decl
18226   in OMP_CLAUSE_DECL and add the node to the head of the list.
18227
18228   If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
18229   return the list created.  */
18230
18231static tree
18232cp_parser_omp_var_list_no_open (cp_parser *parser, enum omp_clause_code kind,
18233				tree list)
18234{
18235  while (1)
18236    {
18237      tree name, decl;
18238
18239      name = cp_parser_id_expression (parser, /*template_p=*/false,
18240				      /*check_dependency_p=*/true,
18241				      /*template_p=*/NULL,
18242				      /*declarator_p=*/false,
18243				      /*optional_p=*/false);
18244      if (name == error_mark_node)
18245	goto skip_comma;
18246
18247      decl = cp_parser_lookup_name_simple (parser, name);
18248      if (decl == error_mark_node)
18249	cp_parser_name_lookup_error (parser, name, decl, NULL);
18250      else if (kind != 0)
18251	{
18252	  tree u = build_omp_clause (kind);
18253	  OMP_CLAUSE_DECL (u) = decl;
18254	  OMP_CLAUSE_CHAIN (u) = list;
18255	  list = u;
18256	}
18257      else
18258	list = tree_cons (decl, NULL_TREE, list);
18259
18260    get_comma:
18261      if (cp_lexer_next_token_is_not (parser->lexer, CPP_COMMA))
18262	break;
18263      cp_lexer_consume_token (parser->lexer);
18264    }
18265
18266  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18267    {
18268      int ending;
18269
18270      /* Try to resync to an unnested comma.  Copied from
18271	 cp_parser_parenthesized_expression_list.  */
18272    skip_comma:
18273      ending = cp_parser_skip_to_closing_parenthesis (parser,
18274						      /*recovering=*/true,
18275						      /*or_comma=*/true,
18276						      /*consume_paren=*/true);
18277      if (ending < 0)
18278	goto get_comma;
18279    }
18280
18281  return list;
18282}
18283
18284/* Similarly, but expect leading and trailing parenthesis.  This is a very
18285   common case for omp clauses.  */
18286
18287static tree
18288cp_parser_omp_var_list (cp_parser *parser, enum omp_clause_code kind, tree list)
18289{
18290  if (cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18291    return cp_parser_omp_var_list_no_open (parser, kind, list);
18292  return list;
18293}
18294
18295/* OpenMP 2.5:
18296   default ( shared | none ) */
18297
18298static tree
18299cp_parser_omp_clause_default (cp_parser *parser, tree list)
18300{
18301  enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
18302  tree c;
18303
18304  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18305    return list;
18306  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18307    {
18308      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18309      const char *p = IDENTIFIER_POINTER (id);
18310
18311      switch (p[0])
18312	{
18313	case 'n':
18314	  if (strcmp ("none", p) != 0)
18315	    goto invalid_kind;
18316	  kind = OMP_CLAUSE_DEFAULT_NONE;
18317	  break;
18318
18319	case 's':
18320	  if (strcmp ("shared", p) != 0)
18321	    goto invalid_kind;
18322	  kind = OMP_CLAUSE_DEFAULT_SHARED;
18323	  break;
18324
18325	default:
18326	  goto invalid_kind;
18327	}
18328
18329      cp_lexer_consume_token (parser->lexer);
18330    }
18331  else
18332    {
18333    invalid_kind:
18334      cp_parser_error (parser, "expected %<none%> or %<shared%>");
18335    }
18336
18337  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18338    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18339					   /*or_comma=*/false,
18340					   /*consume_paren=*/true);
18341
18342  if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
18343    return list;
18344
18345  check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
18346  c = build_omp_clause (OMP_CLAUSE_DEFAULT);
18347  OMP_CLAUSE_CHAIN (c) = list;
18348  OMP_CLAUSE_DEFAULT_KIND (c) = kind;
18349
18350  return c;
18351}
18352
18353/* OpenMP 2.5:
18354   if ( expression ) */
18355
18356static tree
18357cp_parser_omp_clause_if (cp_parser *parser, tree list)
18358{
18359  tree t, c;
18360
18361  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18362    return list;
18363
18364  t = cp_parser_condition (parser);
18365
18366  if (t == error_mark_node
18367      || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18368    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18369					   /*or_comma=*/false,
18370					   /*consume_paren=*/true);
18371
18372  check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
18373
18374  c = build_omp_clause (OMP_CLAUSE_IF);
18375  OMP_CLAUSE_IF_EXPR (c) = t;
18376  OMP_CLAUSE_CHAIN (c) = list;
18377
18378  return c;
18379}
18380
18381/* OpenMP 2.5:
18382   nowait */
18383
18384static tree
18385cp_parser_omp_clause_nowait (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18386{
18387  tree c;
18388
18389  check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
18390
18391  c = build_omp_clause (OMP_CLAUSE_NOWAIT);
18392  OMP_CLAUSE_CHAIN (c) = list;
18393  return c;
18394}
18395
18396/* OpenMP 2.5:
18397   num_threads ( expression ) */
18398
18399static tree
18400cp_parser_omp_clause_num_threads (cp_parser *parser, tree list)
18401{
18402  tree t, c;
18403
18404  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18405    return list;
18406
18407  t = cp_parser_expression (parser, false);
18408
18409  if (t == error_mark_node
18410      || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18411    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18412					   /*or_comma=*/false,
18413					   /*consume_paren=*/true);
18414
18415  check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
18416
18417  c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
18418  OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
18419  OMP_CLAUSE_CHAIN (c) = list;
18420
18421  return c;
18422}
18423
18424/* OpenMP 2.5:
18425   ordered */
18426
18427static tree
18428cp_parser_omp_clause_ordered (cp_parser *parser ATTRIBUTE_UNUSED, tree list)
18429{
18430  tree c;
18431
18432  check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
18433
18434  c = build_omp_clause (OMP_CLAUSE_ORDERED);
18435  OMP_CLAUSE_CHAIN (c) = list;
18436  return c;
18437}
18438
18439/* OpenMP 2.5:
18440   reduction ( reduction-operator : variable-list )
18441
18442   reduction-operator:
18443     One of: + * - & ^ | && || */
18444
18445static tree
18446cp_parser_omp_clause_reduction (cp_parser *parser, tree list)
18447{
18448  enum tree_code code;
18449  tree nlist, c;
18450
18451  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18452    return list;
18453
18454  switch (cp_lexer_peek_token (parser->lexer)->type)
18455    {
18456    case CPP_PLUS:
18457      code = PLUS_EXPR;
18458      break;
18459    case CPP_MULT:
18460      code = MULT_EXPR;
18461      break;
18462    case CPP_MINUS:
18463      code = MINUS_EXPR;
18464      break;
18465    case CPP_AND:
18466      code = BIT_AND_EXPR;
18467      break;
18468    case CPP_XOR:
18469      code = BIT_XOR_EXPR;
18470      break;
18471    case CPP_OR:
18472      code = BIT_IOR_EXPR;
18473      break;
18474    case CPP_AND_AND:
18475      code = TRUTH_ANDIF_EXPR;
18476      break;
18477    case CPP_OR_OR:
18478      code = TRUTH_ORIF_EXPR;
18479      break;
18480    default:
18481      cp_parser_error (parser, "`+', `*', `-', `&', `^', `|', `&&', or `||'");
18482    resync_fail:
18483      cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18484					     /*or_comma=*/false,
18485					     /*consume_paren=*/true);
18486      return list;
18487    }
18488  cp_lexer_consume_token (parser->lexer);
18489
18490  if (!cp_parser_require (parser, CPP_COLON, "`:'"))
18491    goto resync_fail;
18492
18493  nlist = cp_parser_omp_var_list_no_open (parser, OMP_CLAUSE_REDUCTION, list);
18494  for (c = nlist; c != list; c = OMP_CLAUSE_CHAIN (c))
18495    OMP_CLAUSE_REDUCTION_CODE (c) = code;
18496
18497  return nlist;
18498}
18499
18500/* OpenMP 2.5:
18501   schedule ( schedule-kind )
18502   schedule ( schedule-kind , expression )
18503
18504   schedule-kind:
18505     static | dynamic | guided | runtime  */
18506
18507static tree
18508cp_parser_omp_clause_schedule (cp_parser *parser, tree list)
18509{
18510  tree c, t;
18511
18512  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
18513    return list;
18514
18515  c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
18516
18517  if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
18518    {
18519      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
18520      const char *p = IDENTIFIER_POINTER (id);
18521
18522      switch (p[0])
18523	{
18524	case 'd':
18525	  if (strcmp ("dynamic", p) != 0)
18526	    goto invalid_kind;
18527	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
18528	  break;
18529
18530	case 'g':
18531	  if (strcmp ("guided", p) != 0)
18532	    goto invalid_kind;
18533	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
18534	  break;
18535
18536	case 'r':
18537	  if (strcmp ("runtime", p) != 0)
18538	    goto invalid_kind;
18539	  OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
18540	  break;
18541
18542	default:
18543	  goto invalid_kind;
18544	}
18545    }
18546  else if (cp_lexer_next_token_is_keyword (parser->lexer, RID_STATIC))
18547    OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
18548  else
18549    goto invalid_kind;
18550  cp_lexer_consume_token (parser->lexer);
18551
18552  if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
18553    {
18554      cp_lexer_consume_token (parser->lexer);
18555
18556      t = cp_parser_assignment_expression (parser, false);
18557
18558      if (t == error_mark_node)
18559	goto resync_fail;
18560      else if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
18561	error ("schedule %<runtime%> does not take "
18562	       "a %<chunk_size%> parameter");
18563      else
18564	OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
18565
18566      if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18567	goto resync_fail;
18568    }
18569  else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`,' or `)'"))
18570    goto resync_fail;
18571
18572  check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
18573  OMP_CLAUSE_CHAIN (c) = list;
18574  return c;
18575
18576 invalid_kind:
18577  cp_parser_error (parser, "invalid schedule kind");
18578 resync_fail:
18579  cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18580					 /*or_comma=*/false,
18581					 /*consume_paren=*/true);
18582  return list;
18583}
18584
18585/* Parse all OpenMP clauses.  The set clauses allowed by the directive
18586   is a bitmask in MASK.  Return the list of clauses found; the result
18587   of clause default goes in *pdefault.  */
18588
18589static tree
18590cp_parser_omp_all_clauses (cp_parser *parser, unsigned int mask,
18591			   const char *where, cp_token *pragma_tok)
18592{
18593  tree clauses = NULL;
18594
18595  while (cp_lexer_next_token_is_not (parser->lexer, CPP_PRAGMA_EOL))
18596    {
18597      pragma_omp_clause c_kind = cp_parser_omp_clause_name (parser);
18598      const char *c_name;
18599      tree prev = clauses;
18600
18601      switch (c_kind)
18602	{
18603	case PRAGMA_OMP_CLAUSE_COPYIN:
18604	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYIN, clauses);
18605	  c_name = "copyin";
18606	  break;
18607	case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
18608	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_COPYPRIVATE,
18609					    clauses);
18610	  c_name = "copyprivate";
18611	  break;
18612	case PRAGMA_OMP_CLAUSE_DEFAULT:
18613	  clauses = cp_parser_omp_clause_default (parser, clauses);
18614	  c_name = "default";
18615	  break;
18616	case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
18617	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_FIRSTPRIVATE,
18618					    clauses);
18619	  c_name = "firstprivate";
18620	  break;
18621	case PRAGMA_OMP_CLAUSE_IF:
18622	  clauses = cp_parser_omp_clause_if (parser, clauses);
18623	  c_name = "if";
18624	  break;
18625	case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
18626	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_LASTPRIVATE,
18627					    clauses);
18628	  c_name = "lastprivate";
18629	  break;
18630	case PRAGMA_OMP_CLAUSE_NOWAIT:
18631	  clauses = cp_parser_omp_clause_nowait (parser, clauses);
18632	  c_name = "nowait";
18633	  break;
18634	case PRAGMA_OMP_CLAUSE_NUM_THREADS:
18635	  clauses = cp_parser_omp_clause_num_threads (parser, clauses);
18636	  c_name = "num_threads";
18637	  break;
18638	case PRAGMA_OMP_CLAUSE_ORDERED:
18639	  clauses = cp_parser_omp_clause_ordered (parser, clauses);
18640	  c_name = "ordered";
18641	  break;
18642	case PRAGMA_OMP_CLAUSE_PRIVATE:
18643	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_PRIVATE,
18644					    clauses);
18645	  c_name = "private";
18646	  break;
18647	case PRAGMA_OMP_CLAUSE_REDUCTION:
18648	  clauses = cp_parser_omp_clause_reduction (parser, clauses);
18649	  c_name = "reduction";
18650	  break;
18651	case PRAGMA_OMP_CLAUSE_SCHEDULE:
18652	  clauses = cp_parser_omp_clause_schedule (parser, clauses);
18653	  c_name = "schedule";
18654	  break;
18655	case PRAGMA_OMP_CLAUSE_SHARED:
18656	  clauses = cp_parser_omp_var_list (parser, OMP_CLAUSE_SHARED,
18657					    clauses);
18658	  c_name = "shared";
18659	  break;
18660	default:
18661	  cp_parser_error (parser, "expected %<#pragma omp%> clause");
18662	  goto saw_error;
18663	}
18664
18665      if (((mask >> c_kind) & 1) == 0)
18666	{
18667	  /* Remove the invalid clause(s) from the list to avoid
18668	     confusing the rest of the compiler.  */
18669	  clauses = prev;
18670	  error ("%qs is not valid for %qs", c_name, where);
18671	}
18672    }
18673 saw_error:
18674  cp_parser_skip_to_pragma_eol (parser, pragma_tok);
18675  return finish_omp_clauses (clauses);
18676}
18677
18678/* OpenMP 2.5:
18679   structured-block:
18680     statement
18681
18682   In practice, we're also interested in adding the statement to an
18683   outer node.  So it is convenient if we work around the fact that
18684   cp_parser_statement calls add_stmt.  */
18685
18686static unsigned
18687cp_parser_begin_omp_structured_block (cp_parser *parser)
18688{
18689  unsigned save = parser->in_statement;
18690
18691  /* Only move the values to IN_OMP_BLOCK if they weren't false.
18692     This preserves the "not within loop or switch" style error messages
18693     for nonsense cases like
18694	void foo() {
18695	#pragma omp single
18696	  break;
18697	}
18698  */
18699  if (parser->in_statement)
18700    parser->in_statement = IN_OMP_BLOCK;
18701
18702  return save;
18703}
18704
18705static void
18706cp_parser_end_omp_structured_block (cp_parser *parser, unsigned save)
18707{
18708  parser->in_statement = save;
18709}
18710
18711static tree
18712cp_parser_omp_structured_block (cp_parser *parser)
18713{
18714  tree stmt = begin_omp_structured_block ();
18715  unsigned int save = cp_parser_begin_omp_structured_block (parser);
18716
18717  cp_parser_statement (parser, NULL_TREE, false, NULL);
18718
18719  cp_parser_end_omp_structured_block (parser, save);
18720  return finish_omp_structured_block (stmt);
18721}
18722
18723/* OpenMP 2.5:
18724   # pragma omp atomic new-line
18725     expression-stmt
18726
18727   expression-stmt:
18728     x binop= expr | x++ | ++x | x-- | --x
18729   binop:
18730     +, *, -, /, &, ^, |, <<, >>
18731
18732  where x is an lvalue expression with scalar type.  */
18733
18734static void
18735cp_parser_omp_atomic (cp_parser *parser, cp_token *pragma_tok)
18736{
18737  tree lhs, rhs;
18738  enum tree_code code;
18739
18740  cp_parser_require_pragma_eol (parser, pragma_tok);
18741
18742  lhs = cp_parser_unary_expression (parser, /*address_p=*/false,
18743				    /*cast_p=*/false);
18744  switch (TREE_CODE (lhs))
18745    {
18746    case ERROR_MARK:
18747      goto saw_error;
18748
18749    case PREINCREMENT_EXPR:
18750    case POSTINCREMENT_EXPR:
18751      lhs = TREE_OPERAND (lhs, 0);
18752      code = PLUS_EXPR;
18753      rhs = integer_one_node;
18754      break;
18755
18756    case PREDECREMENT_EXPR:
18757    case POSTDECREMENT_EXPR:
18758      lhs = TREE_OPERAND (lhs, 0);
18759      code = MINUS_EXPR;
18760      rhs = integer_one_node;
18761      break;
18762
18763    default:
18764      switch (cp_lexer_peek_token (parser->lexer)->type)
18765	{
18766	case CPP_MULT_EQ:
18767	  code = MULT_EXPR;
18768	  break;
18769	case CPP_DIV_EQ:
18770	  code = TRUNC_DIV_EXPR;
18771	  break;
18772	case CPP_PLUS_EQ:
18773	  code = PLUS_EXPR;
18774	  break;
18775	case CPP_MINUS_EQ:
18776	  code = MINUS_EXPR;
18777	  break;
18778	case CPP_LSHIFT_EQ:
18779	  code = LSHIFT_EXPR;
18780	  break;
18781	case CPP_RSHIFT_EQ:
18782	  code = RSHIFT_EXPR;
18783	  break;
18784	case CPP_AND_EQ:
18785	  code = BIT_AND_EXPR;
18786	  break;
18787	case CPP_OR_EQ:
18788	  code = BIT_IOR_EXPR;
18789	  break;
18790	case CPP_XOR_EQ:
18791	  code = BIT_XOR_EXPR;
18792	  break;
18793	default:
18794	  cp_parser_error (parser,
18795			   "invalid operator for %<#pragma omp atomic%>");
18796	  goto saw_error;
18797	}
18798      cp_lexer_consume_token (parser->lexer);
18799
18800      rhs = cp_parser_expression (parser, false);
18801      if (rhs == error_mark_node)
18802	goto saw_error;
18803      break;
18804    }
18805  finish_omp_atomic (code, lhs, rhs);
18806  cp_parser_consume_semicolon_at_end_of_statement (parser);
18807  return;
18808
18809 saw_error:
18810  cp_parser_skip_to_end_of_block_or_statement (parser);
18811}
18812
18813
18814/* OpenMP 2.5:
18815   # pragma omp barrier new-line  */
18816
18817static void
18818cp_parser_omp_barrier (cp_parser *parser, cp_token *pragma_tok)
18819{
18820  cp_parser_require_pragma_eol (parser, pragma_tok);
18821  finish_omp_barrier ();
18822}
18823
18824/* OpenMP 2.5:
18825   # pragma omp critical [(name)] new-line
18826     structured-block  */
18827
18828static tree
18829cp_parser_omp_critical (cp_parser *parser, cp_token *pragma_tok)
18830{
18831  tree stmt, name = NULL;
18832
18833  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18834    {
18835      cp_lexer_consume_token (parser->lexer);
18836
18837      name = cp_parser_identifier (parser);
18838
18839      if (name == error_mark_node
18840	  || !cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18841	cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18842					       /*or_comma=*/false,
18843					       /*consume_paren=*/true);
18844      if (name == error_mark_node)
18845	name = NULL;
18846    }
18847  cp_parser_require_pragma_eol (parser, pragma_tok);
18848
18849  stmt = cp_parser_omp_structured_block (parser);
18850  return c_finish_omp_critical (stmt, name);
18851}
18852
18853/* OpenMP 2.5:
18854   # pragma omp flush flush-vars[opt] new-line
18855
18856   flush-vars:
18857     ( variable-list ) */
18858
18859static void
18860cp_parser_omp_flush (cp_parser *parser, cp_token *pragma_tok)
18861{
18862  if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN))
18863    (void) cp_parser_omp_var_list (parser, 0, NULL);
18864  cp_parser_require_pragma_eol (parser, pragma_tok);
18865
18866  finish_omp_flush ();
18867}
18868
18869/* Parse the restricted form of the for statment allowed by OpenMP.  */
18870
18871static tree
18872cp_parser_omp_for_loop (cp_parser *parser)
18873{
18874  tree init, cond, incr, body, decl, pre_body;
18875  location_t loc;
18876
18877  if (!cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
18878    {
18879      cp_parser_error (parser, "for statement expected");
18880      return NULL;
18881    }
18882  loc = cp_lexer_consume_token (parser->lexer)->location;
18883  if (!cp_parser_require (parser, CPP_OPEN_PAREN, "`('"))
18884    return NULL;
18885
18886  init = decl = NULL;
18887  pre_body = push_stmt_list ();
18888  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18889    {
18890      cp_decl_specifier_seq type_specifiers;
18891
18892      /* First, try to parse as an initialized declaration.  See
18893	 cp_parser_condition, from whence the bulk of this is copied.  */
18894
18895      cp_parser_parse_tentatively (parser);
18896      cp_parser_type_specifier_seq (parser, /*is_condition=*/false,
18897				    &type_specifiers);
18898      if (!cp_parser_error_occurred (parser))
18899	{
18900	  tree asm_specification, attributes;
18901	  cp_declarator *declarator;
18902
18903	  declarator = cp_parser_declarator (parser,
18904					     CP_PARSER_DECLARATOR_NAMED,
18905					     /*ctor_dtor_or_conv_p=*/NULL,
18906					     /*parenthesized_p=*/NULL,
18907					     /*member_p=*/false);
18908	  attributes = cp_parser_attributes_opt (parser);
18909	  asm_specification = cp_parser_asm_specification_opt (parser);
18910
18911	  cp_parser_require (parser, CPP_EQ, "`='");
18912	  if (cp_parser_parse_definitely (parser))
18913	    {
18914	      tree pushed_scope;
18915
18916	      decl = start_decl (declarator, &type_specifiers,
18917				 /*initialized_p=*/false, attributes,
18918				 /*prefix_attributes=*/NULL_TREE,
18919				 &pushed_scope);
18920
18921	      init = cp_parser_assignment_expression (parser, false);
18922
18923	      cp_finish_decl (decl, NULL_TREE, /*init_const_expr_p=*/false,
18924			      asm_specification, LOOKUP_ONLYCONVERTING);
18925
18926	      if (pushed_scope)
18927		pop_scope (pushed_scope);
18928	    }
18929	}
18930      else
18931	cp_parser_abort_tentative_parse (parser);
18932
18933      /* If parsing as an initialized declaration failed, try again as
18934	 a simple expression.  */
18935      if (decl == NULL)
18936	init = cp_parser_expression (parser, false);
18937    }
18938  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18939  pre_body = pop_stmt_list (pre_body);
18940
18941  cond = NULL;
18942  if (cp_lexer_next_token_is_not (parser->lexer, CPP_SEMICOLON))
18943    cond = cp_parser_condition (parser);
18944  cp_parser_require (parser, CPP_SEMICOLON, "`;'");
18945
18946  incr = NULL;
18947  if (cp_lexer_next_token_is_not (parser->lexer, CPP_CLOSE_PAREN))
18948    incr = cp_parser_expression (parser, false);
18949
18950  if (!cp_parser_require (parser, CPP_CLOSE_PAREN, "`)'"))
18951    cp_parser_skip_to_closing_parenthesis (parser, /*recovering=*/true,
18952					   /*or_comma=*/false,
18953					   /*consume_paren=*/true);
18954
18955  /* Note that we saved the original contents of this flag when we entered
18956     the structured block, and so we don't need to re-save it here.  */
18957  parser->in_statement = IN_OMP_FOR;
18958
18959  /* Note that the grammar doesn't call for a structured block here,
18960     though the loop as a whole is a structured block.  */
18961  body = push_stmt_list ();
18962  cp_parser_statement (parser, NULL_TREE, false, NULL);
18963  body = pop_stmt_list (body);
18964
18965  return finish_omp_for (loc, decl, init, cond, incr, body, pre_body);
18966}
18967
18968/* OpenMP 2.5:
18969   #pragma omp for for-clause[optseq] new-line
18970     for-loop  */
18971
18972#define OMP_FOR_CLAUSE_MASK				\
18973	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
18974	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
18975	| (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)		\
18976	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
18977	| (1u << PRAGMA_OMP_CLAUSE_ORDERED)		\
18978	| (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)		\
18979	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
18980
18981static tree
18982cp_parser_omp_for (cp_parser *parser, cp_token *pragma_tok)
18983{
18984  tree clauses, sb, ret;
18985  unsigned int save;
18986
18987  clauses = cp_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
18988				       "#pragma omp for", pragma_tok);
18989
18990  sb = begin_omp_structured_block ();
18991  save = cp_parser_begin_omp_structured_block (parser);
18992
18993  ret = cp_parser_omp_for_loop (parser);
18994  if (ret)
18995    OMP_FOR_CLAUSES (ret) = clauses;
18996
18997  cp_parser_end_omp_structured_block (parser, save);
18998  add_stmt (finish_omp_structured_block (sb));
18999
19000  return ret;
19001}
19002
19003/* OpenMP 2.5:
19004   # pragma omp master new-line
19005     structured-block  */
19006
19007static tree
19008cp_parser_omp_master (cp_parser *parser, cp_token *pragma_tok)
19009{
19010  cp_parser_require_pragma_eol (parser, pragma_tok);
19011  return c_finish_omp_master (cp_parser_omp_structured_block (parser));
19012}
19013
19014/* OpenMP 2.5:
19015   # pragma omp ordered new-line
19016     structured-block  */
19017
19018static tree
19019cp_parser_omp_ordered (cp_parser *parser, cp_token *pragma_tok)
19020{
19021  cp_parser_require_pragma_eol (parser, pragma_tok);
19022  return c_finish_omp_ordered (cp_parser_omp_structured_block (parser));
19023}
19024
19025/* OpenMP 2.5:
19026
19027   section-scope:
19028     { section-sequence }
19029
19030   section-sequence:
19031     section-directive[opt] structured-block
19032     section-sequence section-directive structured-block  */
19033
19034static tree
19035cp_parser_omp_sections_scope (cp_parser *parser)
19036{
19037  tree stmt, substmt;
19038  bool error_suppress = false;
19039  cp_token *tok;
19040
19041  if (!cp_parser_require (parser, CPP_OPEN_BRACE, "`{'"))
19042    return NULL_TREE;
19043
19044  stmt = push_stmt_list ();
19045
19046  if (cp_lexer_peek_token (parser->lexer)->pragma_kind != PRAGMA_OMP_SECTION)
19047    {
19048      unsigned save;
19049
19050      substmt = begin_omp_structured_block ();
19051      save = cp_parser_begin_omp_structured_block (parser);
19052
19053      while (1)
19054	{
19055	  cp_parser_statement (parser, NULL_TREE, false, NULL);
19056
19057	  tok = cp_lexer_peek_token (parser->lexer);
19058	  if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19059	    break;
19060	  if (tok->type == CPP_CLOSE_BRACE)
19061	    break;
19062	  if (tok->type == CPP_EOF)
19063	    break;
19064	}
19065
19066      cp_parser_end_omp_structured_block (parser, save);
19067      substmt = finish_omp_structured_block (substmt);
19068      substmt = build1 (OMP_SECTION, void_type_node, substmt);
19069      add_stmt (substmt);
19070    }
19071
19072  while (1)
19073    {
19074      tok = cp_lexer_peek_token (parser->lexer);
19075      if (tok->type == CPP_CLOSE_BRACE)
19076	break;
19077      if (tok->type == CPP_EOF)
19078	break;
19079
19080      if (tok->pragma_kind == PRAGMA_OMP_SECTION)
19081	{
19082	  cp_lexer_consume_token (parser->lexer);
19083	  cp_parser_require_pragma_eol (parser, tok);
19084	  error_suppress = false;
19085	}
19086      else if (!error_suppress)
19087	{
19088	  cp_parser_error (parser, "expected %<#pragma omp section%> or %<}%>");
19089	  error_suppress = true;
19090	}
19091
19092      substmt = cp_parser_omp_structured_block (parser);
19093      substmt = build1 (OMP_SECTION, void_type_node, substmt);
19094      add_stmt (substmt);
19095    }
19096  cp_parser_require (parser, CPP_CLOSE_BRACE, "`}'");
19097
19098  substmt = pop_stmt_list (stmt);
19099
19100  stmt = make_node (OMP_SECTIONS);
19101  TREE_TYPE (stmt) = void_type_node;
19102  OMP_SECTIONS_BODY (stmt) = substmt;
19103
19104  add_stmt (stmt);
19105  return stmt;
19106}
19107
19108/* OpenMP 2.5:
19109   # pragma omp sections sections-clause[optseq] newline
19110     sections-scope  */
19111
19112#define OMP_SECTIONS_CLAUSE_MASK			\
19113	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
19114	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
19115	| (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)		\
19116	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
19117	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19118
19119static tree
19120cp_parser_omp_sections (cp_parser *parser, cp_token *pragma_tok)
19121{
19122  tree clauses, ret;
19123
19124  clauses = cp_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
19125				       "#pragma omp sections", pragma_tok);
19126
19127  ret = cp_parser_omp_sections_scope (parser);
19128  if (ret)
19129    OMP_SECTIONS_CLAUSES (ret) = clauses;
19130
19131  return ret;
19132}
19133
19134/* OpenMP 2.5:
19135   # pragma parallel parallel-clause new-line
19136   # pragma parallel for parallel-for-clause new-line
19137   # pragma parallel sections parallel-sections-clause new-line  */
19138
19139#define OMP_PARALLEL_CLAUSE_MASK			\
19140	( (1u << PRAGMA_OMP_CLAUSE_IF)			\
19141	| (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
19142	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
19143	| (1u << PRAGMA_OMP_CLAUSE_DEFAULT)		\
19144	| (1u << PRAGMA_OMP_CLAUSE_SHARED)		\
19145	| (1u << PRAGMA_OMP_CLAUSE_COPYIN)		\
19146	| (1u << PRAGMA_OMP_CLAUSE_REDUCTION)		\
19147	| (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
19148
19149static tree
19150cp_parser_omp_parallel (cp_parser *parser, cp_token *pragma_tok)
19151{
19152  enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
19153  const char *p_name = "#pragma omp parallel";
19154  tree stmt, clauses, par_clause, ws_clause, block;
19155  unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
19156  unsigned int save;
19157
19158  if (cp_lexer_next_token_is_keyword (parser->lexer, RID_FOR))
19159    {
19160      cp_lexer_consume_token (parser->lexer);
19161      p_kind = PRAGMA_OMP_PARALLEL_FOR;
19162      p_name = "#pragma omp parallel for";
19163      mask |= OMP_FOR_CLAUSE_MASK;
19164      mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19165    }
19166  else if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
19167    {
19168      tree id = cp_lexer_peek_token (parser->lexer)->u.value;
19169      const char *p = IDENTIFIER_POINTER (id);
19170      if (strcmp (p, "sections") == 0)
19171	{
19172	  cp_lexer_consume_token (parser->lexer);
19173	  p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
19174	  p_name = "#pragma omp parallel sections";
19175	  mask |= OMP_SECTIONS_CLAUSE_MASK;
19176	  mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
19177	}
19178    }
19179
19180  clauses = cp_parser_omp_all_clauses (parser, mask, p_name, pragma_tok);
19181  block = begin_omp_parallel ();
19182  save = cp_parser_begin_omp_structured_block (parser);
19183
19184  switch (p_kind)
19185    {
19186    case PRAGMA_OMP_PARALLEL:
19187      cp_parser_already_scoped_statement (parser);
19188      par_clause = clauses;
19189      break;
19190
19191    case PRAGMA_OMP_PARALLEL_FOR:
19192      c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19193      stmt = cp_parser_omp_for_loop (parser);
19194      if (stmt)
19195	OMP_FOR_CLAUSES (stmt) = ws_clause;
19196      break;
19197
19198    case PRAGMA_OMP_PARALLEL_SECTIONS:
19199      c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
19200      stmt = cp_parser_omp_sections_scope (parser);
19201      if (stmt)
19202	OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
19203      break;
19204
19205    default:
19206      gcc_unreachable ();
19207    }
19208
19209  cp_parser_end_omp_structured_block (parser, save);
19210  stmt = finish_omp_parallel (par_clause, block);
19211  if (p_kind != PRAGMA_OMP_PARALLEL)
19212    OMP_PARALLEL_COMBINED (stmt) = 1;
19213  return stmt;
19214}
19215
19216/* OpenMP 2.5:
19217   # pragma omp single single-clause[optseq] new-line
19218     structured-block  */
19219
19220#define OMP_SINGLE_CLAUSE_MASK				\
19221	( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)		\
19222	| (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)	\
19223	| (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)		\
19224	| (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
19225
19226static tree
19227cp_parser_omp_single (cp_parser *parser, cp_token *pragma_tok)
19228{
19229  tree stmt = make_node (OMP_SINGLE);
19230  TREE_TYPE (stmt) = void_type_node;
19231
19232  OMP_SINGLE_CLAUSES (stmt)
19233    = cp_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
19234				 "#pragma omp single", pragma_tok);
19235  OMP_SINGLE_BODY (stmt) = cp_parser_omp_structured_block (parser);
19236
19237  return add_stmt (stmt);
19238}
19239
19240/* OpenMP 2.5:
19241   # pragma omp threadprivate (variable-list) */
19242
19243static void
19244cp_parser_omp_threadprivate (cp_parser *parser, cp_token *pragma_tok)
19245{
19246  tree vars;
19247
19248  vars = cp_parser_omp_var_list (parser, 0, NULL);
19249  cp_parser_require_pragma_eol (parser, pragma_tok);
19250
19251  if (!targetm.have_tls)
19252    sorry ("threadprivate variables not supported in this target");
19253
19254  finish_omp_threadprivate (vars);
19255}
19256
19257/* Main entry point to OpenMP statement pragmas.  */
19258
19259static void
19260cp_parser_omp_construct (cp_parser *parser, cp_token *pragma_tok)
19261{
19262  tree stmt;
19263
19264  switch (pragma_tok->pragma_kind)
19265    {
19266    case PRAGMA_OMP_ATOMIC:
19267      cp_parser_omp_atomic (parser, pragma_tok);
19268      return;
19269    case PRAGMA_OMP_CRITICAL:
19270      stmt = cp_parser_omp_critical (parser, pragma_tok);
19271      break;
19272    case PRAGMA_OMP_FOR:
19273      stmt = cp_parser_omp_for (parser, pragma_tok);
19274      break;
19275    case PRAGMA_OMP_MASTER:
19276      stmt = cp_parser_omp_master (parser, pragma_tok);
19277      break;
19278    case PRAGMA_OMP_ORDERED:
19279      stmt = cp_parser_omp_ordered (parser, pragma_tok);
19280      break;
19281    case PRAGMA_OMP_PARALLEL:
19282      stmt = cp_parser_omp_parallel (parser, pragma_tok);
19283      break;
19284    case PRAGMA_OMP_SECTIONS:
19285      stmt = cp_parser_omp_sections (parser, pragma_tok);
19286      break;
19287    case PRAGMA_OMP_SINGLE:
19288      stmt = cp_parser_omp_single (parser, pragma_tok);
19289      break;
19290    default:
19291      gcc_unreachable ();
19292    }
19293
19294  if (stmt)
19295    SET_EXPR_LOCATION (stmt, pragma_tok->location);
19296}
19297
19298/* The parser.  */
19299
19300static GTY (()) cp_parser *the_parser;
19301
19302
19303/* Special handling for the first token or line in the file.  The first
19304   thing in the file might be #pragma GCC pch_preprocess, which loads a
19305   PCH file, which is a GC collection point.  So we need to handle this
19306   first pragma without benefit of an existing lexer structure.
19307
19308   Always returns one token to the caller in *FIRST_TOKEN.  This is
19309   either the true first token of the file, or the first token after
19310   the initial pragma.  */
19311
19312static void
19313cp_parser_initial_pragma (cp_token *first_token)
19314{
19315  tree name = NULL;
19316
19317  cp_lexer_get_preprocessor_token (NULL, first_token);
19318  if (first_token->pragma_kind != PRAGMA_GCC_PCH_PREPROCESS)
19319    return;
19320
19321  cp_lexer_get_preprocessor_token (NULL, first_token);
19322  if (first_token->type == CPP_STRING)
19323    {
19324      name = first_token->u.value;
19325
19326      cp_lexer_get_preprocessor_token (NULL, first_token);
19327      if (first_token->type != CPP_PRAGMA_EOL)
19328	error ("junk at end of %<#pragma GCC pch_preprocess%>");
19329    }
19330  else
19331    error ("expected string literal");
19332
19333  /* Skip to the end of the pragma.  */
19334  while (first_token->type != CPP_PRAGMA_EOL && first_token->type != CPP_EOF)
19335    cp_lexer_get_preprocessor_token (NULL, first_token);
19336
19337  /* Now actually load the PCH file.  */
19338  if (name)
19339    c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
19340
19341  /* Read one more token to return to our caller.  We have to do this
19342     after reading the PCH file in, since its pointers have to be
19343     live.  */
19344  cp_lexer_get_preprocessor_token (NULL, first_token);
19345}
19346
19347/* Normal parsing of a pragma token.  Here we can (and must) use the
19348   regular lexer.  */
19349
19350static bool
19351cp_parser_pragma (cp_parser *parser, enum pragma_context context)
19352{
19353  cp_token *pragma_tok;
19354  unsigned int id;
19355
19356  pragma_tok = cp_lexer_consume_token (parser->lexer);
19357  gcc_assert (pragma_tok->type == CPP_PRAGMA);
19358  parser->lexer->in_pragma = true;
19359
19360  id = pragma_tok->pragma_kind;
19361  switch (id)
19362    {
19363    case PRAGMA_GCC_PCH_PREPROCESS:
19364      error ("%<#pragma GCC pch_preprocess%> must be first");
19365      break;
19366
19367    case PRAGMA_OMP_BARRIER:
19368      switch (context)
19369	{
19370	case pragma_compound:
19371	  cp_parser_omp_barrier (parser, pragma_tok);
19372	  return false;
19373	case pragma_stmt:
19374	  error ("%<#pragma omp barrier%> may only be "
19375		 "used in compound statements");
19376	  break;
19377	default:
19378	  goto bad_stmt;
19379	}
19380      break;
19381
19382    case PRAGMA_OMP_FLUSH:
19383      switch (context)
19384	{
19385	case pragma_compound:
19386	  cp_parser_omp_flush (parser, pragma_tok);
19387	  return false;
19388	case pragma_stmt:
19389	  error ("%<#pragma omp flush%> may only be "
19390		 "used in compound statements");
19391	  break;
19392	default:
19393	  goto bad_stmt;
19394	}
19395      break;
19396
19397    case PRAGMA_OMP_THREADPRIVATE:
19398      cp_parser_omp_threadprivate (parser, pragma_tok);
19399      return false;
19400
19401    case PRAGMA_OMP_ATOMIC:
19402    case PRAGMA_OMP_CRITICAL:
19403    case PRAGMA_OMP_FOR:
19404    case PRAGMA_OMP_MASTER:
19405    case PRAGMA_OMP_ORDERED:
19406    case PRAGMA_OMP_PARALLEL:
19407    case PRAGMA_OMP_SECTIONS:
19408    case PRAGMA_OMP_SINGLE:
19409      if (context == pragma_external)
19410	goto bad_stmt;
19411      cp_parser_omp_construct (parser, pragma_tok);
19412      return true;
19413
19414    case PRAGMA_OMP_SECTION:
19415      error ("%<#pragma omp section%> may only be used in "
19416	     "%<#pragma omp sections%> construct");
19417      break;
19418
19419    default:
19420      gcc_assert (id >= PRAGMA_FIRST_EXTERNAL);
19421      c_invoke_pragma_handler (id);
19422      break;
19423
19424    bad_stmt:
19425      cp_parser_error (parser, "expected declaration specifiers");
19426      break;
19427    }
19428
19429  cp_parser_skip_to_pragma_eol (parser, pragma_tok);
19430  return false;
19431}
19432
19433/* The interface the pragma parsers have to the lexer.  */
19434
19435enum cpp_ttype
19436pragma_lex (tree *value)
19437{
19438  cp_token *tok;
19439  enum cpp_ttype ret;
19440
19441  tok = cp_lexer_peek_token (the_parser->lexer);
19442
19443  ret = tok->type;
19444  *value = tok->u.value;
19445
19446  if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
19447    ret = CPP_EOF;
19448  else if (ret == CPP_STRING)
19449    *value = cp_parser_string_literal (the_parser, false, false);
19450  else
19451    {
19452      cp_lexer_consume_token (the_parser->lexer);
19453      if (ret == CPP_KEYWORD)
19454	ret = CPP_NAME;
19455    }
19456
19457  return ret;
19458}
19459
19460
19461/* External interface.  */
19462
19463/* Parse one entire translation unit.  */
19464
19465void
19466c_parse_file (void)
19467{
19468  bool error_occurred;
19469  static bool already_called = false;
19470
19471  if (already_called)
19472    {
19473      sorry ("inter-module optimizations not implemented for C++");
19474      return;
19475    }
19476  already_called = true;
19477
19478  the_parser = cp_parser_new ();
19479  push_deferring_access_checks (flag_access_control
19480				? dk_no_deferred : dk_no_check);
19481  error_occurred = cp_parser_translation_unit (the_parser);
19482  the_parser = NULL;
19483}
19484
19485/* This variable must be provided by every front end.  */
19486
19487int yydebug;
19488
19489#include "gt-cp-parser.h"
19490