OSDN Git Service

PR fortran/30723
[pf3gnuchains/gcc-fork.git] / gcc / c-parser.c
1 /* Parser for C and Objective-C.
2    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
4
5    Parser actions based on the old Bison parser; structure somewhat
6    influenced by and fragments based on the C++ parser.
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify it under
11 the terms of the GNU General Public License as published by the Free
12 Software Foundation; either version 2, or (at your option) any later
13 version.
14
15 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
16 WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
18 for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING.  If not, write to the Free
22 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
23 02110-1301, USA.  */
24
25 /* TODO:
26
27    Make sure all relevant comments, and all relevant code from all
28    actions, brought over from old parser.  Verify exact correspondence
29    of syntax accepted.
30
31    Add testcases covering every input symbol in every state in old and
32    new parsers.
33
34    Include full syntax for GNU C, including erroneous cases accepted
35    with error messages, in syntax productions in comments.
36
37    Make more diagnostics in the front end generally take an explicit
38    location rather than implicitly using input_location.  */
39
40 #include "config.h"
41 #include "system.h"
42 #include "coretypes.h"
43 #include "tm.h"
44 #include "tree.h"
45 #include "rtl.h"
46 #include "langhooks.h"
47 #include "input.h"
48 #include "cpplib.h"
49 #include "timevar.h"
50 #include "c-pragma.h"
51 #include "c-tree.h"
52 #include "flags.h"
53 #include "output.h"
54 #include "toplev.h"
55 #include "ggc.h"
56 #include "c-common.h"
57 #include "vec.h"
58 #include "target.h"
59 #include "cgraph.h"
60
61 \f
62 /* Objective-C specific parser/lexer information.  */
63
64 static int objc_pq_context = 0;
65
66 /* The following flag is needed to contextualize Objective-C lexical
67    analysis.  In some cases (e.g., 'int NSObject;'), it is undesirable
68    to bind an identifier to an Objective-C class, even if a class with
69    that name exists.  */
70 static int objc_need_raw_identifier = 0;
71 #define OBJC_NEED_RAW_IDENTIFIER(VAL)           \
72   do {                                          \
73     if (c_dialect_objc ())                      \
74       objc_need_raw_identifier = VAL;           \
75   } while (0)
76
77 /* The reserved keyword table.  */
78 struct resword
79 {
80   const char *word;
81   ENUM_BITFIELD(rid) rid : 16;
82   unsigned int disable   : 16;
83 };
84
85 /* Disable mask.  Keywords are disabled if (reswords[i].disable &
86    mask) is _true_.  */
87 #define D_C89   0x01    /* not in C89 */
88 #define D_EXT   0x02    /* GCC extension */
89 #define D_EXT89 0x04    /* GCC extension incorporated in C99 */
90 #define D_OBJC  0x08    /* Objective C only */
91
92 static const struct resword reswords[] =
93 {
94   { "_Bool",            RID_BOOL,       0 },
95   { "_Complex",         RID_COMPLEX,    0 },
96   { "_Decimal32",       RID_DFLOAT32,  D_EXT },
97   { "_Decimal64",       RID_DFLOAT64,  D_EXT },
98   { "_Decimal128",      RID_DFLOAT128, D_EXT },
99   { "__FUNCTION__",     RID_FUNCTION_NAME, 0 },
100   { "__PRETTY_FUNCTION__", RID_PRETTY_FUNCTION_NAME, 0 },
101   { "__alignof",        RID_ALIGNOF,    0 },
102   { "__alignof__",      RID_ALIGNOF,    0 },
103   { "__asm",            RID_ASM,        0 },
104   { "__asm__",          RID_ASM,        0 },
105   { "__attribute",      RID_ATTRIBUTE,  0 },
106   { "__attribute__",    RID_ATTRIBUTE,  0 },
107   { "__builtin_choose_expr", RID_CHOOSE_EXPR, 0 },
108   { "__builtin_offsetof", RID_OFFSETOF, 0 },
109   { "__builtin_types_compatible_p", RID_TYPES_COMPATIBLE_P, 0 },
110   { "__builtin_va_arg", RID_VA_ARG,     0 },
111   { "__complex",        RID_COMPLEX,    0 },
112   { "__complex__",      RID_COMPLEX,    0 },
113   { "__const",          RID_CONST,      0 },
114   { "__const__",        RID_CONST,      0 },
115   { "__extension__",    RID_EXTENSION,  0 },
116   { "__func__",         RID_C99_FUNCTION_NAME, 0 },
117   { "__imag",           RID_IMAGPART,   0 },
118   { "__imag__",         RID_IMAGPART,   0 },
119   { "__inline",         RID_INLINE,     0 },
120   { "__inline__",       RID_INLINE,     0 },
121   { "__label__",        RID_LABEL,      0 },
122   { "__real",           RID_REALPART,   0 },
123   { "__real__",         RID_REALPART,   0 },
124   { "__restrict",       RID_RESTRICT,   0 },
125   { "__restrict__",     RID_RESTRICT,   0 },
126   { "__signed",         RID_SIGNED,     0 },
127   { "__signed__",       RID_SIGNED,     0 },
128   { "__thread",         RID_THREAD,     0 },
129   { "__typeof",         RID_TYPEOF,     0 },
130   { "__typeof__",       RID_TYPEOF,     0 },
131   { "__volatile",       RID_VOLATILE,   0 },
132   { "__volatile__",     RID_VOLATILE,   0 },
133   { "asm",              RID_ASM,        D_EXT },
134   { "auto",             RID_AUTO,       0 },
135   { "break",            RID_BREAK,      0 },
136   { "case",             RID_CASE,       0 },
137   { "char",             RID_CHAR,       0 },
138   { "const",            RID_CONST,      0 },
139   { "continue",         RID_CONTINUE,   0 },
140   { "default",          RID_DEFAULT,    0 },
141   { "do",               RID_DO,         0 },
142   { "double",           RID_DOUBLE,     0 },
143   { "else",             RID_ELSE,       0 },
144   { "enum",             RID_ENUM,       0 },
145   { "extern",           RID_EXTERN,     0 },
146   { "float",            RID_FLOAT,      0 },
147   { "for",              RID_FOR,        0 },
148   { "goto",             RID_GOTO,       0 },
149   { "if",               RID_IF,         0 },
150   { "inline",           RID_INLINE,     D_EXT89 },
151   { "int",              RID_INT,        0 },
152   { "long",             RID_LONG,       0 },
153   { "register",         RID_REGISTER,   0 },
154   { "restrict",         RID_RESTRICT,   D_C89 },
155   { "return",           RID_RETURN,     0 },
156   { "short",            RID_SHORT,      0 },
157   { "signed",           RID_SIGNED,     0 },
158   { "sizeof",           RID_SIZEOF,     0 },
159   { "static",           RID_STATIC,     0 },
160   { "struct",           RID_STRUCT,     0 },
161   { "switch",           RID_SWITCH,     0 },
162   { "typedef",          RID_TYPEDEF,    0 },
163   { "typeof",           RID_TYPEOF,     D_EXT },
164   { "union",            RID_UNION,      0 },
165   { "unsigned",         RID_UNSIGNED,   0 },
166   { "void",             RID_VOID,       0 },
167   { "volatile",         RID_VOLATILE,   0 },
168   { "while",            RID_WHILE,      0 },
169   /* These Objective-C keywords are recognized only immediately after
170      an '@'.  */
171   { "class",            RID_AT_CLASS,           D_OBJC },
172   { "compatibility_alias", RID_AT_ALIAS,        D_OBJC },
173   { "defs",             RID_AT_DEFS,            D_OBJC },
174   { "encode",           RID_AT_ENCODE,          D_OBJC },
175   { "end",              RID_AT_END,             D_OBJC },
176   { "implementation",   RID_AT_IMPLEMENTATION,  D_OBJC },
177   { "interface",        RID_AT_INTERFACE,       D_OBJC },
178   { "private",          RID_AT_PRIVATE,         D_OBJC },
179   { "protected",        RID_AT_PROTECTED,       D_OBJC },
180   { "protocol",         RID_AT_PROTOCOL,        D_OBJC },
181   { "public",           RID_AT_PUBLIC,          D_OBJC },
182   { "selector",         RID_AT_SELECTOR,        D_OBJC },
183   { "throw",            RID_AT_THROW,           D_OBJC },
184   { "try",              RID_AT_TRY,             D_OBJC },
185   { "catch",            RID_AT_CATCH,           D_OBJC },
186   { "finally",          RID_AT_FINALLY,         D_OBJC },
187   { "synchronized",     RID_AT_SYNCHRONIZED,    D_OBJC },
188   /* These are recognized only in protocol-qualifier context
189      (see above) */
190   { "bycopy",           RID_BYCOPY,             D_OBJC },
191   { "byref",            RID_BYREF,              D_OBJC },
192   { "in",               RID_IN,                 D_OBJC },
193   { "inout",            RID_INOUT,              D_OBJC },
194   { "oneway",           RID_ONEWAY,             D_OBJC },
195   { "out",              RID_OUT,                D_OBJC },
196 };
197 #define N_reswords (sizeof reswords / sizeof (struct resword))
198
199 /* Initialization routine for this file.  */
200
201 void
202 c_parse_init (void)
203 {
204   /* The only initialization required is of the reserved word
205      identifiers.  */
206   unsigned int i;
207   tree id;
208   int mask = (flag_isoc99 ? 0 : D_C89)
209               | (flag_no_asm ? (flag_isoc99 ? D_EXT : D_EXT|D_EXT89) : 0);
210
211   if (!c_dialect_objc ())
212      mask |= D_OBJC;
213
214   ridpointers = GGC_CNEWVEC (tree, (int) RID_MAX);
215   for (i = 0; i < N_reswords; i++)
216     {
217       /* If a keyword is disabled, do not enter it into the table
218          and so create a canonical spelling that isn't a keyword.  */
219       if (reswords[i].disable & mask)
220         continue;
221
222       id = get_identifier (reswords[i].word);
223       C_RID_CODE (id) = reswords[i].rid;
224       C_IS_RESERVED_WORD (id) = 1;
225       ridpointers [(int) reswords[i].rid] = id;
226     }
227 }
228 \f
229 /* The C lexer intermediates between the lexer in cpplib and c-lex.c
230    and the C parser.  Unlike the C++ lexer, the parser structure
231    stores the lexer information instead of using a separate structure.
232    Identifiers are separated into ordinary identifiers, type names,
233    keywords and some other Objective-C types of identifiers, and some
234    look-ahead is maintained.
235
236    ??? It might be a good idea to lex the whole file up front (as for
237    C++).  It would then be possible to share more of the C and C++
238    lexer code, if desired.  */
239
240 /* The following local token type is used.  */
241
242 /* A keyword.  */
243 #define CPP_KEYWORD ((enum cpp_ttype) (N_TTYPES + 1))
244
245 /* More information about the type of a CPP_NAME token.  */
246 typedef enum c_id_kind {
247   /* An ordinary identifier.  */
248   C_ID_ID,
249   /* An identifier declared as a typedef name.  */
250   C_ID_TYPENAME,
251   /* An identifier declared as an Objective-C class name.  */
252   C_ID_CLASSNAME,
253   /* Not an identifier.  */
254   C_ID_NONE
255 } c_id_kind;
256
257 /* A single C token after string literal concatenation and conversion
258    of preprocessing tokens to tokens.  */
259 typedef struct c_token GTY (())
260 {
261   /* The kind of token.  */
262   ENUM_BITFIELD (cpp_ttype) type : 8;
263   /* If this token is a CPP_NAME, this value indicates whether also
264      declared as some kind of type.  Otherwise, it is C_ID_NONE.  */
265   ENUM_BITFIELD (c_id_kind) id_kind : 8;
266   /* If this token is a keyword, this value indicates which keyword.
267      Otherwise, this value is RID_MAX.  */
268   ENUM_BITFIELD (rid) keyword : 8;
269   /* If this token is a CPP_PRAGMA, this indicates the pragma that
270      was seen.  Otherwise it is PRAGMA_NONE.  */
271   ENUM_BITFIELD (pragma_kind) pragma_kind : 7;
272   /* True if this token is from a system header.  */
273   BOOL_BITFIELD in_system_header : 1;
274   /* The value associated with this token, if any.  */
275   tree value;
276   /* The location at which this token was found.  */
277   location_t location;
278 } c_token;
279
280 /* A parser structure recording information about the state and
281    context of parsing.  Includes lexer information with up to two
282    tokens of look-ahead; more are not needed for C.  */
283 typedef struct c_parser GTY(())
284 {
285   /* The look-ahead tokens.  */
286   c_token tokens[2];
287   /* How many look-ahead tokens are available (0, 1 or 2).  */
288   short tokens_avail;
289   /* True if a syntax error is being recovered from; false otherwise.
290      c_parser_error sets this flag.  It should clear this flag when
291      enough tokens have been consumed to recover from the error.  */
292   BOOL_BITFIELD error : 1;
293   /* True if we're processing a pragma, and shouldn't automatically
294      consume CPP_PRAGMA_EOL.  */
295   BOOL_BITFIELD in_pragma : 1;
296 } c_parser;
297
298
299 /* The actual parser and external interface.  ??? Does this need to be
300    garbage-collected?  */
301
302 static GTY (()) c_parser *the_parser;
303
304
305 /* Read in and lex a single token, storing it in *TOKEN.  */
306
307 static void
308 c_lex_one_token (c_token *token)
309 {
310   timevar_push (TV_LEX);
311
312   token->type = c_lex_with_flags (&token->value, &token->location, NULL);
313   token->id_kind = C_ID_NONE;
314   token->keyword = RID_MAX;
315   token->pragma_kind = PRAGMA_NONE;
316   token->in_system_header = in_system_header;
317
318   switch (token->type)
319     {
320     case CPP_NAME:
321       {
322         tree decl;
323
324         int objc_force_identifier = objc_need_raw_identifier;
325         OBJC_NEED_RAW_IDENTIFIER (0);
326
327         if (C_IS_RESERVED_WORD (token->value))
328           {
329             enum rid rid_code = C_RID_CODE (token->value);
330
331             if (c_dialect_objc ())
332               {
333                 if (!OBJC_IS_AT_KEYWORD (rid_code)
334                     && (!OBJC_IS_PQ_KEYWORD (rid_code) || objc_pq_context))
335                   {
336                     /* Return the canonical spelling for this keyword.  */
337                     token->value = ridpointers[(int) rid_code];
338                     token->type = CPP_KEYWORD;
339                     token->keyword = rid_code;
340                     break;
341                   }
342               }
343             else
344               {
345                 /* Return the canonical spelling for this keyword.  */
346                 token->value = ridpointers[(int) rid_code];
347                 token->type = CPP_KEYWORD;
348                 token->keyword = rid_code;
349                 break;
350               }
351           }
352
353         decl = lookup_name (token->value);
354         if (decl)
355           {
356             if (TREE_CODE (decl) == TYPE_DECL)
357               {
358                 token->id_kind = C_ID_TYPENAME;
359                 break;
360               }
361           }
362         else if (c_dialect_objc ())
363           {
364             tree objc_interface_decl = objc_is_class_name (token->value);
365             /* Objective-C class names are in the same namespace as
366                variables and typedefs, and hence are shadowed by local
367                declarations.  */
368             if (objc_interface_decl
369                 && (global_bindings_p ()
370                     || (!objc_force_identifier && !decl)))
371               {
372                 token->value = objc_interface_decl;
373                 token->id_kind = C_ID_CLASSNAME;
374                 break;
375               }
376           }
377         token->id_kind = C_ID_ID;
378       }
379       break;
380     case CPP_AT_NAME:
381       /* This only happens in Objective-C; it must be a keyword.  */
382       token->type = CPP_KEYWORD;
383       token->keyword = C_RID_CODE (token->value);
384       break;
385     case CPP_COLON:
386     case CPP_COMMA:
387     case CPP_CLOSE_PAREN:
388     case CPP_SEMICOLON:
389       /* These tokens may affect the interpretation of any identifiers
390          following, if doing Objective-C.  */
391       OBJC_NEED_RAW_IDENTIFIER (0);
392       break;
393     case CPP_PRAGMA:
394       /* We smuggled the cpp_token->u.pragma value in an INTEGER_CST.  */
395       token->pragma_kind = TREE_INT_CST_LOW (token->value);
396       token->value = NULL;
397       break;
398     default:
399       break;
400     }
401   timevar_pop (TV_LEX);
402 }
403
404 /* Return a pointer to the next token from PARSER, reading it in if
405    necessary.  */
406
407 static inline c_token *
408 c_parser_peek_token (c_parser *parser)
409 {
410   if (parser->tokens_avail == 0)
411     {
412       c_lex_one_token (&parser->tokens[0]);
413       parser->tokens_avail = 1;
414     }
415   return &parser->tokens[0];
416 }
417
418 /* Return true if the next token from PARSER has the indicated
419    TYPE.  */
420
421 static inline bool
422 c_parser_next_token_is (c_parser *parser, enum cpp_ttype type)
423 {
424   return c_parser_peek_token (parser)->type == type;
425 }
426
427 /* Return true if the next token from PARSER does not have the
428    indicated TYPE.  */
429
430 static inline bool
431 c_parser_next_token_is_not (c_parser *parser, enum cpp_ttype type)
432 {
433   return !c_parser_next_token_is (parser, type);
434 }
435
436 /* Return true if the next token from PARSER is the indicated
437    KEYWORD.  */
438
439 static inline bool
440 c_parser_next_token_is_keyword (c_parser *parser, enum rid keyword)
441 {
442   c_token *token;
443
444   /* Peek at the next token.  */
445   token = c_parser_peek_token (parser);
446   /* Check to see if it is the indicated keyword.  */
447   return token->keyword == keyword;
448 }
449
450 /* Return true if TOKEN can start a type name,
451    false otherwise.  */
452 static bool
453 c_token_starts_typename (c_token *token)
454 {
455   switch (token->type)
456     {
457     case CPP_NAME:
458       switch (token->id_kind)
459         {
460         case C_ID_ID:
461           return false;
462         case C_ID_TYPENAME:
463           return true;
464         case C_ID_CLASSNAME:
465           gcc_assert (c_dialect_objc ());
466           return true;
467         default:
468           gcc_unreachable ();
469         }
470     case CPP_KEYWORD:
471       switch (token->keyword)
472         {
473         case RID_UNSIGNED:
474         case RID_LONG:
475         case RID_SHORT:
476         case RID_SIGNED:
477         case RID_COMPLEX:
478         case RID_INT:
479         case RID_CHAR:
480         case RID_FLOAT:
481         case RID_DOUBLE:
482         case RID_VOID:
483         case RID_DFLOAT32:
484         case RID_DFLOAT64:
485         case RID_DFLOAT128:
486         case RID_BOOL:
487         case RID_ENUM:
488         case RID_STRUCT:
489         case RID_UNION:
490         case RID_TYPEOF:
491         case RID_CONST:
492         case RID_VOLATILE:
493         case RID_RESTRICT:
494         case RID_ATTRIBUTE:
495           return true;
496         default:
497           return false;
498         }
499     case CPP_LESS:
500       if (c_dialect_objc ())
501         return true;
502       return false;
503     default:
504       return false;
505     }
506 }
507
508 /* Return true if the next token from PARSER can start a type name,
509    false otherwise.  */
510 static inline bool
511 c_parser_next_token_starts_typename (c_parser *parser)
512 {
513   c_token *token = c_parser_peek_token (parser);
514   return c_token_starts_typename (token);
515 }
516
517 /* Return true if TOKEN can start declaration specifiers, false
518    otherwise.  */
519 static bool
520 c_token_starts_declspecs (c_token *token)
521 {
522   switch (token->type)
523     {
524     case CPP_NAME:
525       switch (token->id_kind)
526         {
527         case C_ID_ID:
528           return false;
529         case C_ID_TYPENAME:
530           return true;
531         case C_ID_CLASSNAME:
532           gcc_assert (c_dialect_objc ());
533           return true;
534         default:
535           gcc_unreachable ();
536         }
537     case CPP_KEYWORD:
538       switch (token->keyword)
539         {
540         case RID_STATIC:
541         case RID_EXTERN:
542         case RID_REGISTER:
543         case RID_TYPEDEF:
544         case RID_INLINE:
545         case RID_AUTO:
546         case RID_THREAD:
547         case RID_UNSIGNED:
548         case RID_LONG:
549         case RID_SHORT:
550         case RID_SIGNED:
551         case RID_COMPLEX:
552         case RID_INT:
553         case RID_CHAR:
554         case RID_FLOAT:
555         case RID_DOUBLE:
556         case RID_VOID:
557         case RID_DFLOAT32:
558         case RID_DFLOAT64:
559         case RID_DFLOAT128:
560         case RID_BOOL:
561         case RID_ENUM:
562         case RID_STRUCT:
563         case RID_UNION:
564         case RID_TYPEOF:
565         case RID_CONST:
566         case RID_VOLATILE:
567         case RID_RESTRICT:
568         case RID_ATTRIBUTE:
569           return true;
570         default:
571           return false;
572         }
573     case CPP_LESS:
574       if (c_dialect_objc ())
575         return true;
576       return false;
577     default:
578       return false;
579     }
580 }
581
582 /* Return true if the next token from PARSER can start declaration
583    specifiers, false otherwise.  */
584 static inline bool
585 c_parser_next_token_starts_declspecs (c_parser *parser)
586 {
587   c_token *token = c_parser_peek_token (parser);
588   return c_token_starts_declspecs (token);
589 }
590
591 /* Return a pointer to the next-but-one token from PARSER, reading it
592    in if necessary.  The next token is already read in.  */
593
594 static c_token *
595 c_parser_peek_2nd_token (c_parser *parser)
596 {
597   if (parser->tokens_avail >= 2)
598     return &parser->tokens[1];
599   gcc_assert (parser->tokens_avail == 1);
600   gcc_assert (parser->tokens[0].type != CPP_EOF);
601   gcc_assert (parser->tokens[0].type != CPP_PRAGMA_EOL);
602   c_lex_one_token (&parser->tokens[1]);
603   parser->tokens_avail = 2;
604   return &parser->tokens[1];
605 }
606
607 /* Consume the next token from PARSER.  */
608
609 static void
610 c_parser_consume_token (c_parser *parser)
611 {
612   gcc_assert (parser->tokens_avail >= 1);
613   gcc_assert (parser->tokens[0].type != CPP_EOF);
614   gcc_assert (!parser->in_pragma || parser->tokens[0].type != CPP_PRAGMA_EOL);
615   gcc_assert (parser->error || parser->tokens[0].type != CPP_PRAGMA);
616   if (parser->tokens_avail == 2)
617     parser->tokens[0] = parser->tokens[1];
618   parser->tokens_avail--;
619 }
620
621 /* Expect the current token to be a #pragma.  Consume it and remember
622    that we've begun parsing a pragma.  */
623
624 static void
625 c_parser_consume_pragma (c_parser *parser)
626 {
627   gcc_assert (!parser->in_pragma);
628   gcc_assert (parser->tokens_avail >= 1);
629   gcc_assert (parser->tokens[0].type == CPP_PRAGMA);
630   if (parser->tokens_avail == 2)
631     parser->tokens[0] = parser->tokens[1];
632   parser->tokens_avail--;
633   parser->in_pragma = true;
634 }
635
636 /* Update the globals input_location and in_system_header from
637    TOKEN.  */
638 static inline void
639 c_parser_set_source_position_from_token (c_token *token)
640 {
641   if (token->type != CPP_EOF)
642     {
643       input_location = token->location;
644       in_system_header = token->in_system_header;
645     }
646 }
647
648 /* Issue a diagnostic of the form
649       FILE:LINE: MESSAGE before TOKEN
650    where TOKEN is the next token in the input stream of PARSER.
651    MESSAGE (specified by the caller) is usually of the form "expected
652    OTHER-TOKEN".
653
654    Do not issue a diagnostic if still recovering from an error.
655
656    ??? This is taken from the C++ parser, but building up messages in
657    this way is not i18n-friendly and some other approach should be
658    used.  */
659
660 static void
661 c_parser_error (c_parser *parser, const char *gmsgid)
662 {
663   c_token *token = c_parser_peek_token (parser);
664   if (parser->error)
665     return;
666   parser->error = true;
667   if (!gmsgid)
668     return;
669   /* This diagnostic makes more sense if it is tagged to the line of
670      the token we just peeked at.  */
671   c_parser_set_source_position_from_token (token);
672   c_parse_error (gmsgid,
673                  /* Because c_parse_error does not understand
674                     CPP_KEYWORD, keywords are treated like
675                     identifiers.  */
676                  (token->type == CPP_KEYWORD ? CPP_NAME : token->type),
677                  token->value);
678 }
679
680 /* If the next token is of the indicated TYPE, consume it.  Otherwise,
681    issue the error MSGID.  If MSGID is NULL then a message has already
682    been produced and no message will be produced this time.  Returns
683    true if found, false otherwise.  */
684
685 static bool
686 c_parser_require (c_parser *parser,
687                   enum cpp_ttype type,
688                   const char *msgid)
689 {
690   if (c_parser_next_token_is (parser, type))
691     {
692       c_parser_consume_token (parser);
693       return true;
694     }
695   else
696     {
697       c_parser_error (parser, msgid);
698       return false;
699     }
700 }
701
702 /* If the next token is the indicated keyword, consume it.  Otherwise,
703    issue the error MSGID.  Returns true if found, false otherwise.  */
704
705 static bool
706 c_parser_require_keyword (c_parser *parser,
707                           enum rid keyword,
708                           const char *msgid)
709 {
710   if (c_parser_next_token_is_keyword (parser, keyword))
711     {
712       c_parser_consume_token (parser);
713       return true;
714     }
715   else
716     {
717       c_parser_error (parser, msgid);
718       return false;
719     }
720 }
721
722 /* Like c_parser_require, except that tokens will be skipped until the
723    desired token is found.  An error message is still produced if the
724    next token is not as expected.  If MSGID is NULL then a message has
725    already been produced and no message will be produced this
726    time.  */
727
728 static void
729 c_parser_skip_until_found (c_parser *parser,
730                            enum cpp_ttype type,
731                            const char *msgid)
732 {
733   unsigned nesting_depth = 0;
734
735   if (c_parser_require (parser, type, msgid))
736     return;
737
738   /* Skip tokens until the desired token is found.  */
739   while (true)
740     {
741       /* Peek at the next token.  */
742       c_token *token = c_parser_peek_token (parser);
743       /* If we've reached the token we want, consume it and stop.  */
744       if (token->type == type && !nesting_depth)
745         {
746           c_parser_consume_token (parser);
747           break;
748         }
749
750       /* If we've run out of tokens, stop.  */
751       if (token->type == CPP_EOF)
752         return;
753       if (token->type == CPP_PRAGMA_EOL && parser->in_pragma)
754         return;
755       if (token->type == CPP_OPEN_BRACE
756           || token->type == CPP_OPEN_PAREN
757           || token->type == CPP_OPEN_SQUARE)
758         ++nesting_depth;
759       else if (token->type == CPP_CLOSE_BRACE
760                || token->type == CPP_CLOSE_PAREN
761                || token->type == CPP_CLOSE_SQUARE)
762         {
763           if (nesting_depth-- == 0)
764             break;
765         }
766       /* Consume this token.  */
767       c_parser_consume_token (parser);
768     }
769   parser->error = false;
770 }
771
772 /* Skip tokens until the end of a parameter is found, but do not
773    consume the comma, semicolon or closing delimiter.  */
774
775 static void
776 c_parser_skip_to_end_of_parameter (c_parser *parser)
777 {
778   unsigned nesting_depth = 0;
779
780   while (true)
781     {
782       c_token *token = c_parser_peek_token (parser);
783       if ((token->type == CPP_COMMA || token->type == CPP_SEMICOLON)
784           && !nesting_depth)
785         break;
786       /* If we've run out of tokens, stop.  */
787       if (token->type == CPP_EOF)
788         return;
789       if (token->type == CPP_PRAGMA_EOL && parser->in_pragma)
790         return;
791       if (token->type == CPP_OPEN_BRACE
792           || token->type == CPP_OPEN_PAREN
793           || token->type == CPP_OPEN_SQUARE)
794         ++nesting_depth;
795       else if (token->type == CPP_CLOSE_BRACE
796                || token->type == CPP_CLOSE_PAREN
797                || token->type == CPP_CLOSE_SQUARE)
798         {
799           if (nesting_depth-- == 0)
800             break;
801         }
802       /* Consume this token.  */
803       c_parser_consume_token (parser);
804     }
805   parser->error = false;
806 }
807
808 /* Expect to be at the end of the pragma directive and consume an
809    end of line marker.  */
810
811 static void
812 c_parser_skip_to_pragma_eol (c_parser *parser)
813 {
814   gcc_assert (parser->in_pragma);
815   parser->in_pragma = false;
816
817   if (!c_parser_require (parser, CPP_PRAGMA_EOL, "expected end of line"))
818     while (true)
819       {
820         c_token *token = c_parser_peek_token (parser);
821         if (token->type == CPP_EOF)
822           break;
823         if (token->type == CPP_PRAGMA_EOL)
824           {
825             c_parser_consume_token (parser);
826             break;
827           }
828         c_parser_consume_token (parser);
829       }
830
831   parser->error = false;
832 }
833
834 /* Skip tokens until we have consumed an entire block, or until we
835    have consumed a non-nested ';'.  */
836
837 static void
838 c_parser_skip_to_end_of_block_or_statement (c_parser *parser)
839 {
840   unsigned nesting_depth = 0;
841   bool save_error = parser->error;
842
843   while (true)
844     {
845       c_token *token;
846
847       /* Peek at the next token.  */
848       token = c_parser_peek_token (parser);
849
850       switch (token->type)
851         {
852         case CPP_EOF:
853           return;
854
855         case CPP_PRAGMA_EOL:
856           if (parser->in_pragma)
857             return;
858           break;
859
860         case CPP_SEMICOLON:
861           /* If the next token is a ';', we have reached the
862              end of the statement.  */
863           if (!nesting_depth)
864             {
865               /* Consume the ';'.  */
866               c_parser_consume_token (parser);
867               goto finished;
868             }
869           break;
870
871         case CPP_CLOSE_BRACE:
872           /* If the next token is a non-nested '}', then we have
873              reached the end of the current block.  */
874           if (nesting_depth == 0 || --nesting_depth == 0)
875             {
876               c_parser_consume_token (parser);
877               goto finished;
878             }
879           break;
880
881         case CPP_OPEN_BRACE:
882           /* If it the next token is a '{', then we are entering a new
883              block.  Consume the entire block.  */
884           ++nesting_depth;
885           break;
886
887         case CPP_PRAGMA:
888           /* If we see a pragma, consume the whole thing at once.  We
889              have some safeguards against consuming pragmas willy-nilly.
890              Normally, we'd expect to be here with parser->error set,
891              which disables these safeguards.  But it's possible to get
892              here for secondary error recovery, after parser->error has
893              been cleared.  */
894           c_parser_consume_pragma (parser);
895           c_parser_skip_to_pragma_eol (parser);
896           parser->error = save_error;
897           continue;
898
899         default:
900           break;
901         }
902
903       c_parser_consume_token (parser);
904     }
905
906  finished:
907   parser->error = false;
908 }
909
910 /* Save the warning flags which are controlled by __extension__.  */
911
912 static inline int
913 disable_extension_diagnostics (void)
914 {
915   int ret = (pedantic
916              | (warn_pointer_arith << 1)
917              | (warn_traditional << 2)
918              | (flag_iso << 3));
919   pedantic = 0;
920   warn_pointer_arith = 0;
921   warn_traditional = 0;
922   flag_iso = 0;
923   return ret;
924 }
925
926 /* Restore the warning flags which are controlled by __extension__.
927    FLAGS is the return value from disable_extension_diagnostics.  */
928
929 static inline void
930 restore_extension_diagnostics (int flags)
931 {
932   pedantic = flags & 1;
933   warn_pointer_arith = (flags >> 1) & 1;
934   warn_traditional = (flags >> 2) & 1;
935   flag_iso = (flags >> 3) & 1;
936 }
937
938 /* Possibly kinds of declarator to parse.  */
939 typedef enum c_dtr_syn {
940   /* A normal declarator with an identifier.  */
941   C_DTR_NORMAL,
942   /* An abstract declarator (maybe empty).  */
943   C_DTR_ABSTRACT,
944   /* A parameter declarator: may be either, but after a type name does
945      not redeclare a typedef name as an identifier if it can
946      alternatively be interpreted as a typedef name; see DR#009,
947      applied in C90 TC1, omitted from C99 and reapplied in C99 TC2
948      following DR#249.  For example, given a typedef T, "int T" and
949      "int *T" are valid parameter declarations redeclaring T, while
950      "int (T)" and "int * (T)" and "int (T[])" and "int (T (int))" are
951      abstract declarators rather than involving redundant parentheses;
952      the same applies with attributes inside the parentheses before
953      "T".  */
954   C_DTR_PARM
955 } c_dtr_syn;
956
957 static void c_parser_external_declaration (c_parser *);
958 static void c_parser_asm_definition (c_parser *);
959 static void c_parser_declaration_or_fndef (c_parser *, bool, bool, bool, bool);
960 static void c_parser_declspecs (c_parser *, struct c_declspecs *, bool, bool,
961                                 bool);
962 static struct c_typespec c_parser_enum_specifier (c_parser *);
963 static struct c_typespec c_parser_struct_or_union_specifier (c_parser *);
964 static tree c_parser_struct_declaration (c_parser *);
965 static struct c_typespec c_parser_typeof_specifier (c_parser *);
966 static struct c_declarator *c_parser_declarator (c_parser *, bool, c_dtr_syn,
967                                                  bool *);
968 static struct c_declarator *c_parser_direct_declarator (c_parser *, bool,
969                                                         c_dtr_syn, bool *);
970 static struct c_declarator *c_parser_direct_declarator_inner (c_parser *,
971                                                               bool,
972                                                               struct c_declarator *);
973 static struct c_arg_info *c_parser_parms_declarator (c_parser *, bool, tree);
974 static struct c_arg_info *c_parser_parms_list_declarator (c_parser *, tree);
975 static struct c_parm *c_parser_parameter_declaration (c_parser *, tree);
976 static tree c_parser_simple_asm_expr (c_parser *);
977 static tree c_parser_attributes (c_parser *);
978 static struct c_type_name *c_parser_type_name (c_parser *);
979 static struct c_expr c_parser_initializer (c_parser *);
980 static struct c_expr c_parser_braced_init (c_parser *, tree, bool);
981 static void c_parser_initelt (c_parser *);
982 static void c_parser_initval (c_parser *, struct c_expr *);
983 static tree c_parser_compound_statement (c_parser *);
984 static void c_parser_compound_statement_nostart (c_parser *);
985 static void c_parser_label (c_parser *);
986 static void c_parser_statement (c_parser *);
987 static void c_parser_statement_after_labels (c_parser *);
988 static void c_parser_if_statement (c_parser *);
989 static void c_parser_switch_statement (c_parser *);
990 static void c_parser_while_statement (c_parser *);
991 static void c_parser_do_statement (c_parser *);
992 static void c_parser_for_statement (c_parser *);
993 static tree c_parser_asm_statement (c_parser *);
994 static tree c_parser_asm_operands (c_parser *, bool);
995 static tree c_parser_asm_clobbers (c_parser *);
996 static struct c_expr c_parser_expr_no_commas (c_parser *, struct c_expr *);
997 static struct c_expr c_parser_conditional_expression (c_parser *,
998                                                       struct c_expr *);
999 static struct c_expr c_parser_binary_expression (c_parser *, struct c_expr *);
1000 static struct c_expr c_parser_cast_expression (c_parser *, struct c_expr *);
1001 static struct c_expr c_parser_unary_expression (c_parser *);
1002 static struct c_expr c_parser_sizeof_expression (c_parser *);
1003 static struct c_expr c_parser_alignof_expression (c_parser *);
1004 static struct c_expr c_parser_postfix_expression (c_parser *);
1005 static struct c_expr c_parser_postfix_expression_after_paren_type (c_parser *,
1006                                                                    struct c_type_name *);
1007 static struct c_expr c_parser_postfix_expression_after_primary (c_parser *,
1008                                                                 struct c_expr);
1009 static struct c_expr c_parser_expression (c_parser *);
1010 static struct c_expr c_parser_expression_conv (c_parser *);
1011 static tree c_parser_expr_list (c_parser *, bool);
1012 static void c_parser_omp_construct (c_parser *);
1013 static void c_parser_omp_threadprivate (c_parser *);
1014 static void c_parser_omp_barrier (c_parser *);
1015 static void c_parser_omp_flush (c_parser *);
1016
1017 enum pragma_context { pragma_external, pragma_stmt, pragma_compound };
1018 static bool c_parser_pragma (c_parser *, enum pragma_context);
1019
1020 /* These Objective-C parser functions are only ever called when
1021    compiling Objective-C.  */
1022 static void c_parser_objc_class_definition (c_parser *);
1023 static void c_parser_objc_class_instance_variables (c_parser *);
1024 static void c_parser_objc_class_declaration (c_parser *);
1025 static void c_parser_objc_alias_declaration (c_parser *);
1026 static void c_parser_objc_protocol_definition (c_parser *);
1027 static enum tree_code c_parser_objc_method_type (c_parser *);
1028 static void c_parser_objc_method_definition (c_parser *);
1029 static void c_parser_objc_methodprotolist (c_parser *);
1030 static void c_parser_objc_methodproto (c_parser *);
1031 static tree c_parser_objc_method_decl (c_parser *);
1032 static tree c_parser_objc_type_name (c_parser *);
1033 static tree c_parser_objc_protocol_refs (c_parser *);
1034 static void c_parser_objc_try_catch_statement (c_parser *);
1035 static void c_parser_objc_synchronized_statement (c_parser *);
1036 static tree c_parser_objc_selector (c_parser *);
1037 static tree c_parser_objc_selector_arg (c_parser *);
1038 static tree c_parser_objc_receiver (c_parser *);
1039 static tree c_parser_objc_message_args (c_parser *);
1040 static tree c_parser_objc_keywordexpr (c_parser *);
1041
1042 /* Parse a translation unit (C90 6.7, C99 6.9).
1043
1044    translation-unit:
1045      external-declarations
1046
1047    external-declarations:
1048      external-declaration
1049      external-declarations external-declaration
1050
1051    GNU extensions:
1052
1053    translation-unit:
1054      empty
1055 */
1056
1057 static void
1058 c_parser_translation_unit (c_parser *parser)
1059 {
1060   if (c_parser_next_token_is (parser, CPP_EOF))
1061     {
1062       if (pedantic)
1063         pedwarn ("ISO C forbids an empty source file");
1064     }
1065   else
1066     {
1067       void *obstack_position = obstack_alloc (&parser_obstack, 0);
1068       do
1069         {
1070           ggc_collect ();
1071           c_parser_external_declaration (parser);
1072           obstack_free (&parser_obstack, obstack_position);
1073         }
1074       while (c_parser_next_token_is_not (parser, CPP_EOF));
1075     }
1076 }
1077
1078 /* Parse an external declaration (C90 6.7, C99 6.9).
1079
1080    external-declaration:
1081      function-definition
1082      declaration
1083
1084    GNU extensions:
1085
1086    external-declaration:
1087      asm-definition
1088      ;
1089      __extension__ external-declaration
1090
1091    Objective-C:
1092
1093    external-declaration:
1094      objc-class-definition
1095      objc-class-declaration
1096      objc-alias-declaration
1097      objc-protocol-definition
1098      objc-method-definition
1099      @end
1100 */
1101
1102 static void
1103 c_parser_external_declaration (c_parser *parser)
1104 {
1105   int ext;
1106   switch (c_parser_peek_token (parser)->type)
1107     {
1108     case CPP_KEYWORD:
1109       switch (c_parser_peek_token (parser)->keyword)
1110         {
1111         case RID_EXTENSION:
1112           ext = disable_extension_diagnostics ();
1113           c_parser_consume_token (parser);
1114           c_parser_external_declaration (parser);
1115           restore_extension_diagnostics (ext);
1116           break;
1117         case RID_ASM:
1118           c_parser_asm_definition (parser);
1119           break;
1120         case RID_AT_INTERFACE:
1121         case RID_AT_IMPLEMENTATION:
1122           gcc_assert (c_dialect_objc ());
1123           c_parser_objc_class_definition (parser);
1124           break;
1125         case RID_AT_CLASS:
1126           gcc_assert (c_dialect_objc ());
1127           c_parser_objc_class_declaration (parser);
1128           break;
1129         case RID_AT_ALIAS:
1130           gcc_assert (c_dialect_objc ());
1131           c_parser_objc_alias_declaration (parser);
1132           break;
1133         case RID_AT_PROTOCOL:
1134           gcc_assert (c_dialect_objc ());
1135           c_parser_objc_protocol_definition (parser);
1136           break;
1137         case RID_AT_END:
1138           gcc_assert (c_dialect_objc ());
1139           c_parser_consume_token (parser);
1140           objc_finish_implementation ();
1141           break;
1142         default:
1143           goto decl_or_fndef;
1144         }
1145       break;
1146     case CPP_SEMICOLON:
1147       if (pedantic)
1148         pedwarn ("ISO C does not allow extra %<;%> outside of a function");
1149       c_parser_consume_token (parser);
1150       break;
1151     case CPP_PRAGMA:
1152       c_parser_pragma (parser, pragma_external);
1153       break;
1154     case CPP_PLUS:
1155     case CPP_MINUS:
1156       if (c_dialect_objc ())
1157         {
1158           c_parser_objc_method_definition (parser);
1159           break;
1160         }
1161       /* Else fall through, and yield a syntax error trying to parse
1162          as a declaration or function definition.  */
1163     default:
1164     decl_or_fndef:
1165       /* A declaration or a function definition.  We can only tell
1166          which after parsing the declaration specifiers, if any, and
1167          the first declarator.  */
1168       c_parser_declaration_or_fndef (parser, true, true, false, true);
1169       break;
1170     }
1171 }
1172
1173
1174 /* Parse a declaration or function definition (C90 6.5, 6.7.1, C99
1175    6.7, 6.9.1).  If FNDEF_OK is true, a function definition is
1176    accepted; otherwise (old-style parameter declarations) only other
1177    declarations are accepted.  If NESTED is true, we are inside a
1178    function or parsing old-style parameter declarations; any functions
1179    encountered are nested functions and declaration specifiers are
1180    required; otherwise we are at top level and functions are normal
1181    functions and declaration specifiers may be optional.  If EMPTY_OK
1182    is true, empty declarations are OK (subject to all other
1183    constraints); otherwise (old-style parameter declarations) they are
1184    diagnosed.  If START_ATTR_OK is true, the declaration specifiers
1185    may start with attributes; otherwise they may not.
1186
1187    declaration:
1188      declaration-specifiers init-declarator-list[opt] ;
1189
1190    function-definition:
1191      declaration-specifiers[opt] declarator declaration-list[opt]
1192        compound-statement
1193
1194    declaration-list:
1195      declaration
1196      declaration-list declaration
1197
1198    init-declarator-list:
1199      init-declarator
1200      init-declarator-list , init-declarator
1201
1202    init-declarator:
1203      declarator simple-asm-expr[opt] attributes[opt]
1204      declarator simple-asm-expr[opt] attributes[opt] = initializer
1205
1206    GNU extensions:
1207
1208    nested-function-definition:
1209      declaration-specifiers declarator declaration-list[opt]
1210        compound-statement
1211
1212    The simple-asm-expr and attributes are GNU extensions.
1213
1214    This function does not handle __extension__; that is handled in its
1215    callers.  ??? Following the old parser, __extension__ may start
1216    external declarations, declarations in functions and declarations
1217    at the start of "for" loops, but not old-style parameter
1218    declarations.
1219
1220    C99 requires declaration specifiers in a function definition; the
1221    absence is diagnosed through the diagnosis of implicit int.  In GNU
1222    C we also allow but diagnose declarations without declaration
1223    specifiers, but only at top level (elsewhere they conflict with
1224    other syntax).
1225    
1226    OpenMP:
1227    
1228    declaration:
1229      threadprivate-directive  */
1230
1231 static void
1232 c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok, bool empty_ok,
1233                                bool nested, bool start_attr_ok)
1234 {
1235   struct c_declspecs *specs;
1236   tree prefix_attrs;
1237   tree all_prefix_attrs;
1238   bool diagnosed_no_specs = false;
1239
1240   specs = build_null_declspecs ();
1241   c_parser_declspecs (parser, specs, true, true, start_attr_ok);
1242   if (parser->error)
1243     {
1244       c_parser_skip_to_end_of_block_or_statement (parser);
1245       return;
1246     }
1247   if (nested && !specs->declspecs_seen_p)
1248     {
1249       c_parser_error (parser, "expected declaration specifiers");
1250       c_parser_skip_to_end_of_block_or_statement (parser);
1251       return;
1252     }
1253   finish_declspecs (specs);
1254   if (c_parser_next_token_is (parser, CPP_SEMICOLON))
1255     {
1256       if (empty_ok)
1257         shadow_tag (specs);
1258       else
1259         {
1260           shadow_tag_warned (specs, 1);
1261           pedwarn ("empty declaration");
1262         }
1263       c_parser_consume_token (parser);
1264       return;
1265     }
1266   pending_xref_error ();
1267   prefix_attrs = specs->attrs;
1268   all_prefix_attrs = prefix_attrs;
1269   specs->attrs = NULL_TREE;
1270   while (true)
1271     {
1272       struct c_declarator *declarator;
1273       bool dummy = false;
1274       tree fnbody;
1275       /* Declaring either one or more declarators (in which case we
1276          should diagnose if there were no declaration specifiers) or a
1277          function definition (in which case the diagnostic for
1278          implicit int suffices).  */
1279       declarator = c_parser_declarator (parser, specs->type_seen_p,
1280                                         C_DTR_NORMAL, &dummy);
1281       if (declarator == NULL)
1282         {
1283           c_parser_skip_to_end_of_block_or_statement (parser);
1284           return;
1285         }
1286       if (c_parser_next_token_is (parser, CPP_EQ)
1287           || c_parser_next_token_is (parser, CPP_COMMA)
1288           || c_parser_next_token_is (parser, CPP_SEMICOLON)
1289           || c_parser_next_token_is_keyword (parser, RID_ASM)
1290           || c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
1291         {
1292           tree asm_name = NULL_TREE;
1293           tree postfix_attrs = NULL_TREE;
1294           if (!diagnosed_no_specs && !specs->declspecs_seen_p)
1295             {
1296               diagnosed_no_specs = true;
1297               pedwarn ("data definition has no type or storage class");
1298             }
1299           /* Having seen a data definition, there cannot now be a
1300              function definition.  */
1301           fndef_ok = false;
1302           if (c_parser_next_token_is_keyword (parser, RID_ASM))
1303             asm_name = c_parser_simple_asm_expr (parser);
1304           if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
1305             postfix_attrs = c_parser_attributes (parser);
1306           if (c_parser_next_token_is (parser, CPP_EQ))
1307             {
1308               tree d;
1309               struct c_expr init;
1310               c_parser_consume_token (parser);
1311               /* The declaration of the variable is in effect while
1312                  its initializer is parsed.  */
1313               d = start_decl (declarator, specs, true,
1314                               chainon (postfix_attrs, all_prefix_attrs));
1315               if (!d)
1316                 d = error_mark_node;
1317               start_init (d, asm_name, global_bindings_p ());
1318               init = c_parser_initializer (parser);
1319               finish_init ();
1320               if (d != error_mark_node)
1321                 {
1322                   maybe_warn_string_init (TREE_TYPE (d), init);
1323                   finish_decl (d, init.value, asm_name);
1324                 }
1325             }
1326           else
1327             {
1328               tree d = start_decl (declarator, specs, false,
1329                                    chainon (postfix_attrs,
1330                                             all_prefix_attrs));
1331               if (d)
1332                 finish_decl (d, NULL_TREE, asm_name);
1333             }
1334           if (c_parser_next_token_is (parser, CPP_COMMA))
1335             {
1336               c_parser_consume_token (parser);
1337               if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
1338                 all_prefix_attrs = chainon (c_parser_attributes (parser),
1339                                             prefix_attrs);
1340               else
1341                 all_prefix_attrs = prefix_attrs;
1342               continue;
1343             }
1344           else if (c_parser_next_token_is (parser, CPP_SEMICOLON))
1345             {
1346               c_parser_consume_token (parser);
1347               return;
1348             }
1349           else
1350             {
1351               c_parser_error (parser, "expected %<,%> or %<;%>");
1352               c_parser_skip_to_end_of_block_or_statement (parser);
1353               return;
1354             }
1355         }
1356       else if (!fndef_ok)
1357         {
1358           c_parser_error (parser, "expected %<=%>, %<,%>, %<;%>, "
1359                           "%<asm%> or %<__attribute__%>");
1360           c_parser_skip_to_end_of_block_or_statement (parser);
1361           return;
1362         }
1363       /* Function definition (nested or otherwise).  */
1364       if (nested)
1365         {
1366           if (pedantic)
1367             pedwarn ("ISO C forbids nested functions");
1368           push_function_context ();
1369         }
1370       if (!start_function (specs, declarator, all_prefix_attrs))
1371         {
1372           /* This can appear in many cases looking nothing like a
1373              function definition, so we don't give a more specific
1374              error suggesting there was one.  */
1375           c_parser_error (parser, "expected %<=%>, %<,%>, %<;%>, %<asm%> "
1376                           "or %<__attribute__%>");
1377           if (nested)
1378             pop_function_context ();
1379           break;
1380         }
1381       /* Parse old-style parameter declarations.  ??? Attributes are
1382          not allowed to start declaration specifiers here because of a
1383          syntax conflict between a function declaration with attribute
1384          suffix and a function definition with an attribute prefix on
1385          first old-style parameter declaration.  Following the old
1386          parser, they are not accepted on subsequent old-style
1387          parameter declarations either.  However, there is no
1388          ambiguity after the first declaration, nor indeed on the
1389          first as long as we don't allow postfix attributes after a
1390          declarator with a nonempty identifier list in a definition;
1391          and postfix attributes have never been accepted here in
1392          function definitions either.  */
1393       while (c_parser_next_token_is_not (parser, CPP_EOF)
1394              && c_parser_next_token_is_not (parser, CPP_OPEN_BRACE))
1395         c_parser_declaration_or_fndef (parser, false, false, true, false);
1396       DECL_SOURCE_LOCATION (current_function_decl)
1397         = c_parser_peek_token (parser)->location;
1398       store_parm_decls ();
1399       fnbody = c_parser_compound_statement (parser);
1400       if (nested)
1401         {
1402           tree decl = current_function_decl;
1403           add_stmt (fnbody);
1404           finish_function ();
1405           pop_function_context ();
1406           add_stmt (build_stmt (DECL_EXPR, decl));
1407         }
1408       else
1409         {
1410           add_stmt (fnbody);
1411           finish_function ();
1412         }
1413       break;
1414     }
1415 }
1416
1417 /* Parse an asm-definition (asm() outside a function body).  This is a
1418    GNU extension.
1419
1420    asm-definition:
1421      simple-asm-expr ;
1422 */
1423
1424 static void
1425 c_parser_asm_definition (c_parser *parser)
1426 {
1427   tree asm_str = c_parser_simple_asm_expr (parser);
1428   if (asm_str)
1429     cgraph_add_asm_node (asm_str);
1430   c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
1431 }
1432
1433 /* Parse some declaration specifiers (possibly none) (C90 6.5, C99
1434    6.7), adding them to SPECS (which may already include some).
1435    Storage class specifiers are accepted iff SCSPEC_OK; type
1436    specifiers are accepted iff TYPESPEC_OK; attributes are accepted at
1437    the start iff START_ATTR_OK.
1438
1439    declaration-specifiers:
1440      storage-class-specifier declaration-specifiers[opt]
1441      type-specifier declaration-specifiers[opt]
1442      type-qualifier declaration-specifiers[opt]
1443      function-specifier declaration-specifiers[opt]
1444
1445    Function specifiers (inline) are from C99, and are currently
1446    handled as storage class specifiers, as is __thread.
1447
1448    C90 6.5.1, C99 6.7.1:
1449    storage-class-specifier:
1450      typedef
1451      extern
1452      static
1453      auto
1454      register
1455
1456    C99 6.7.4:
1457    function-specifier:
1458      inline
1459
1460    C90 6.5.2, C99 6.7.2:
1461    type-specifier:
1462      void
1463      char
1464      short
1465      int
1466      long
1467      float
1468      double
1469      signed
1470      unsigned
1471      _Bool
1472      _Complex
1473      [_Imaginary removed in C99 TC2]
1474      struct-or-union-specifier
1475      enum-specifier
1476      typedef-name
1477
1478    (_Bool and _Complex are new in C99.)
1479
1480    C90 6.5.3, C99 6.7.3:
1481
1482    type-qualifier:
1483      const
1484      restrict
1485      volatile
1486
1487    (restrict is new in C99.)
1488
1489    GNU extensions:
1490
1491    declaration-specifiers:
1492      attributes declaration-specifiers[opt]
1493
1494    storage-class-specifier:
1495      __thread
1496
1497    type-specifier:
1498      typeof-specifier
1499      _Decimal32
1500      _Decimal64
1501      _Decimal128
1502
1503    Objective-C:
1504
1505    type-specifier:
1506      class-name objc-protocol-refs[opt]
1507      typedef-name objc-protocol-refs
1508      objc-protocol-refs
1509 */
1510
1511 static void
1512 c_parser_declspecs (c_parser *parser, struct c_declspecs *specs,
1513                     bool scspec_ok, bool typespec_ok, bool start_attr_ok)
1514 {
1515   bool attrs_ok = start_attr_ok;
1516   bool seen_type = specs->type_seen_p;
1517   while (c_parser_next_token_is (parser, CPP_NAME)
1518          || c_parser_next_token_is (parser, CPP_KEYWORD)
1519          || (c_dialect_objc () && c_parser_next_token_is (parser, CPP_LESS)))
1520     {
1521       struct c_typespec t;
1522       tree attrs;
1523       if (c_parser_next_token_is (parser, CPP_NAME))
1524         {
1525           tree value = c_parser_peek_token (parser)->value;
1526           c_id_kind kind = c_parser_peek_token (parser)->id_kind;
1527           /* This finishes the specifiers unless a type name is OK, it
1528              is declared as a type name and a type name hasn't yet
1529              been seen.  */
1530           if (!typespec_ok || seen_type
1531               || (kind != C_ID_TYPENAME && kind != C_ID_CLASSNAME))
1532             break;
1533           c_parser_consume_token (parser);
1534           seen_type = true;
1535           attrs_ok = true;
1536           if (kind == C_ID_TYPENAME
1537               && (!c_dialect_objc ()
1538                   || c_parser_next_token_is_not (parser, CPP_LESS)))
1539             {
1540               t.kind = ctsk_typedef;
1541               /* For a typedef name, record the meaning, not the name.
1542                  In case of 'foo foo, bar;'.  */
1543               t.spec = lookup_name (value);
1544             }
1545           else
1546             {
1547               tree proto = NULL_TREE;
1548               gcc_assert (c_dialect_objc ());
1549               t.kind = ctsk_objc;
1550               if (c_parser_next_token_is (parser, CPP_LESS))
1551                 proto = c_parser_objc_protocol_refs (parser);
1552               t.spec = objc_get_protocol_qualified_type (value, proto);
1553             }
1554           declspecs_add_type (specs, t);
1555           continue;
1556         }
1557       if (c_parser_next_token_is (parser, CPP_LESS))
1558         {
1559           /* Make "<SomeProtocol>" equivalent to "id <SomeProtocol>" -
1560              nisse@lysator.liu.se.  */
1561           tree proto;
1562           gcc_assert (c_dialect_objc ());
1563           if (!typespec_ok || seen_type)
1564             break;
1565           proto = c_parser_objc_protocol_refs (parser);
1566           t.kind = ctsk_objc;
1567           t.spec = objc_get_protocol_qualified_type (NULL_TREE, proto);
1568           declspecs_add_type (specs, t);
1569           continue;
1570         }
1571       gcc_assert (c_parser_next_token_is (parser, CPP_KEYWORD));
1572       switch (c_parser_peek_token (parser)->keyword)
1573         {
1574         case RID_STATIC:
1575         case RID_EXTERN:
1576         case RID_REGISTER:
1577         case RID_TYPEDEF:
1578         case RID_INLINE:
1579         case RID_AUTO:
1580         case RID_THREAD:
1581           if (!scspec_ok)
1582             goto out;
1583           attrs_ok = true;
1584           /* TODO: Distinguish between function specifiers (inline)
1585              and storage class specifiers, either here or in
1586              declspecs_add_scspec.  */
1587           declspecs_add_scspec (specs, c_parser_peek_token (parser)->value);
1588           c_parser_consume_token (parser);
1589           break;
1590         case RID_UNSIGNED:
1591         case RID_LONG:
1592         case RID_SHORT:
1593         case RID_SIGNED:
1594         case RID_COMPLEX:
1595         case RID_INT:
1596         case RID_CHAR:
1597         case RID_FLOAT:
1598         case RID_DOUBLE:
1599         case RID_VOID:
1600         case RID_DFLOAT32:
1601         case RID_DFLOAT64:
1602         case RID_DFLOAT128:
1603         case RID_BOOL:
1604           if (!typespec_ok)
1605             goto out;
1606           attrs_ok = true;
1607           seen_type = true;
1608           OBJC_NEED_RAW_IDENTIFIER (1);
1609           t.kind = ctsk_resword;
1610           t.spec = c_parser_peek_token (parser)->value;
1611           declspecs_add_type (specs, t);
1612           c_parser_consume_token (parser);
1613           break;
1614         case RID_ENUM:
1615           if (!typespec_ok)
1616             goto out;
1617           attrs_ok = true;
1618           seen_type = true;
1619           t = c_parser_enum_specifier (parser);
1620           declspecs_add_type (specs, t);
1621           break;
1622         case RID_STRUCT:
1623         case RID_UNION:
1624           if (!typespec_ok)
1625             goto out;
1626           attrs_ok = true;
1627           seen_type = true;
1628           t = c_parser_struct_or_union_specifier (parser);
1629           declspecs_add_type (specs, t);
1630           break;
1631         case RID_TYPEOF:
1632           /* ??? The old parser rejected typeof after other type
1633              specifiers, but is a syntax error the best way of
1634              handling this?  */
1635           if (!typespec_ok || seen_type)
1636             goto out;
1637           attrs_ok = true;
1638           seen_type = true;
1639           t = c_parser_typeof_specifier (parser);
1640           declspecs_add_type (specs, t);
1641           break;
1642         case RID_CONST:
1643         case RID_VOLATILE:
1644         case RID_RESTRICT:
1645           attrs_ok = true;
1646           declspecs_add_qual (specs, c_parser_peek_token (parser)->value);
1647           c_parser_consume_token (parser);
1648           break;
1649         case RID_ATTRIBUTE:
1650           if (!attrs_ok)
1651             goto out;
1652           attrs = c_parser_attributes (parser);
1653           declspecs_add_attrs (specs, attrs);
1654           break;
1655         default:
1656           goto out;
1657         }
1658     }
1659  out: ;
1660 }
1661
1662 /* Parse an enum specifier (C90 6.5.2.2, C99 6.7.2.2).
1663
1664    enum-specifier:
1665      enum attributes[opt] identifier[opt] { enumerator-list } attributes[opt]
1666      enum attributes[opt] identifier[opt] { enumerator-list , } attributes[opt]
1667      enum attributes[opt] identifier
1668
1669    The form with trailing comma is new in C99.  The forms with
1670    attributes are GNU extensions.  In GNU C, we accept any expression
1671    without commas in the syntax (assignment expressions, not just
1672    conditional expressions); assignment expressions will be diagnosed
1673    as non-constant.
1674
1675    enumerator-list:
1676      enumerator
1677      enumerator-list , enumerator
1678
1679    enumerator:
1680      enumeration-constant
1681      enumeration-constant = constant-expression
1682 */
1683
1684 static struct c_typespec
1685 c_parser_enum_specifier (c_parser *parser)
1686 {
1687   struct c_typespec ret;
1688   tree attrs;
1689   tree ident = NULL_TREE;
1690   gcc_assert (c_parser_next_token_is_keyword (parser, RID_ENUM));
1691   c_parser_consume_token (parser);
1692   attrs = c_parser_attributes (parser);
1693   if (c_parser_next_token_is (parser, CPP_NAME))
1694     {
1695       ident = c_parser_peek_token (parser)->value;
1696       c_parser_consume_token (parser);
1697     }
1698   if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
1699     {
1700       /* Parse an enum definition.  */
1701       tree type = start_enum (ident);
1702       tree postfix_attrs;
1703       /* We chain the enumerators in reverse order, then put them in
1704          forward order at the end.  */
1705       tree values = NULL_TREE;
1706       c_parser_consume_token (parser);
1707       while (true)
1708         {
1709           tree enum_id;
1710           tree enum_value;
1711           tree enum_decl;
1712           bool seen_comma;
1713           if (c_parser_next_token_is_not (parser, CPP_NAME))
1714             {
1715               c_parser_error (parser, "expected identifier");
1716               c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, NULL);
1717               values = error_mark_node;
1718               break;
1719             }
1720           enum_id = c_parser_peek_token (parser)->value;
1721           c_parser_consume_token (parser);
1722           if (c_parser_next_token_is (parser, CPP_EQ))
1723             {
1724               c_parser_consume_token (parser);
1725               enum_value = c_parser_expr_no_commas (parser, NULL).value;
1726             }
1727           else
1728             enum_value = NULL_TREE;
1729           enum_decl = build_enumerator (enum_id, enum_value);
1730           TREE_CHAIN (enum_decl) = values;
1731           values = enum_decl;
1732           seen_comma = false;
1733           if (c_parser_next_token_is (parser, CPP_COMMA))
1734             {
1735               seen_comma = true;
1736               c_parser_consume_token (parser);
1737             }
1738           if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
1739             {
1740               if (seen_comma && pedantic && !flag_isoc99)
1741                 pedwarn ("comma at end of enumerator list");
1742               c_parser_consume_token (parser);
1743               break;
1744             }
1745           if (!seen_comma)
1746             {
1747               c_parser_error (parser, "expected %<,%> or %<}%>");
1748               c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, NULL);
1749               values = error_mark_node;
1750               break;
1751             }
1752         }
1753       postfix_attrs = c_parser_attributes (parser);
1754       ret.spec = finish_enum (type, nreverse (values),
1755                               chainon (attrs, postfix_attrs));
1756       ret.kind = ctsk_tagdef;
1757       return ret;
1758     }
1759   else if (!ident)
1760     {
1761       c_parser_error (parser, "expected %<{%>");
1762       ret.spec = error_mark_node;
1763       ret.kind = ctsk_tagref;
1764       return ret;
1765     }
1766   ret = parser_xref_tag (ENUMERAL_TYPE, ident);
1767   /* In ISO C, enumerated types can be referred to only if already
1768      defined.  */
1769   if (pedantic && !COMPLETE_TYPE_P (ret.spec))
1770     pedwarn ("ISO C forbids forward references to %<enum%> types");
1771   return ret;
1772 }
1773
1774 /* Parse a struct or union specifier (C90 6.5.2.1, C99 6.7.2.1).
1775
1776    struct-or-union-specifier:
1777      struct-or-union attributes[opt] identifier[opt]
1778        { struct-contents } attributes[opt]
1779      struct-or-union attributes[opt] identifier
1780
1781    struct-contents:
1782      struct-declaration-list
1783
1784    struct-declaration-list:
1785      struct-declaration ;
1786      struct-declaration-list struct-declaration ;
1787
1788    GNU extensions:
1789
1790    struct-contents:
1791      empty
1792      struct-declaration
1793      struct-declaration-list struct-declaration
1794
1795    struct-declaration-list:
1796      struct-declaration-list ;
1797      ;
1798
1799    (Note that in the syntax here, unlike that in ISO C, the semicolons
1800    are included here rather than in struct-declaration, in order to
1801    describe the syntax with extra semicolons and missing semicolon at
1802    end.)
1803
1804    Objective-C:
1805
1806    struct-declaration-list:
1807      @defs ( class-name )
1808
1809    (Note this does not include a trailing semicolon, but can be
1810    followed by further declarations, and gets a pedwarn-if-pedantic
1811    when followed by a semicolon.)  */
1812
1813 static struct c_typespec
1814 c_parser_struct_or_union_specifier (c_parser *parser)
1815 {
1816   struct c_typespec ret;
1817   tree attrs;
1818   tree ident = NULL_TREE;
1819   enum tree_code code;
1820   switch (c_parser_peek_token (parser)->keyword)
1821     {
1822     case RID_STRUCT:
1823       code = RECORD_TYPE;
1824       break;
1825     case RID_UNION:
1826       code = UNION_TYPE;
1827       break;
1828     default:
1829       gcc_unreachable ();
1830     }
1831   c_parser_consume_token (parser);
1832   attrs = c_parser_attributes (parser);
1833   if (c_parser_next_token_is (parser, CPP_NAME))
1834     {
1835       ident = c_parser_peek_token (parser)->value;
1836       c_parser_consume_token (parser);
1837     }
1838   if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
1839     {
1840       /* Parse a struct or union definition.  Start the scope of the
1841          tag before parsing components.  */
1842       tree type = start_struct (code, ident);
1843       tree postfix_attrs;
1844       /* We chain the components in reverse order, then put them in
1845          forward order at the end.  Each struct-declaration may
1846          declare multiple components (comma-separated), so we must use
1847          chainon to join them, although when parsing each
1848          struct-declaration we can use TREE_CHAIN directly.
1849
1850          The theory behind all this is that there will be more
1851          semicolon separated fields than comma separated fields, and
1852          so we'll be minimizing the number of node traversals required
1853          by chainon.  */
1854       tree contents = NULL_TREE;
1855       c_parser_consume_token (parser);
1856       /* Handle the Objective-C @defs construct,
1857          e.g. foo(sizeof(struct{ @defs(ClassName) }));.  */
1858       if (c_parser_next_token_is_keyword (parser, RID_AT_DEFS))
1859         {
1860           tree name;
1861           gcc_assert (c_dialect_objc ());
1862           c_parser_consume_token (parser);
1863           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
1864             goto end_at_defs;
1865           if (c_parser_next_token_is (parser, CPP_NAME)
1866               && c_parser_peek_token (parser)->id_kind == C_ID_CLASSNAME)
1867             {
1868               name = c_parser_peek_token (parser)->value;
1869               c_parser_consume_token (parser);
1870             }
1871           else
1872             {
1873               c_parser_error (parser, "expected class name");
1874               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
1875               goto end_at_defs;
1876             }
1877           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
1878                                      "expected %<)%>");
1879           contents = nreverse (objc_get_class_ivars (name));
1880         }
1881     end_at_defs:
1882       /* Parse the struct-declarations and semicolons.  Problems with
1883          semicolons are diagnosed here; empty structures are diagnosed
1884          elsewhere.  */
1885       while (true)
1886         {
1887           tree decls;
1888           /* Parse any stray semicolon.  */
1889           if (c_parser_next_token_is (parser, CPP_SEMICOLON))
1890             {
1891               if (pedantic)
1892                 pedwarn ("extra semicolon in struct or union specified");
1893               c_parser_consume_token (parser);
1894               continue;
1895             }
1896           /* Stop if at the end of the struct or union contents.  */
1897           if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
1898             {
1899               c_parser_consume_token (parser);
1900               break;
1901             }
1902           /* Accept #pragmas at struct scope.  */
1903           if (c_parser_next_token_is (parser, CPP_PRAGMA))
1904             {
1905               c_parser_pragma (parser, pragma_external);
1906               continue;
1907             }
1908           /* Parse some comma-separated declarations, but not the
1909              trailing semicolon if any.  */
1910           decls = c_parser_struct_declaration (parser);
1911           contents = chainon (decls, contents);
1912           /* If no semicolon follows, either we have a parse error or
1913              are at the end of the struct or union and should
1914              pedwarn.  */
1915           if (c_parser_next_token_is (parser, CPP_SEMICOLON))
1916             c_parser_consume_token (parser);
1917           else
1918             {
1919               if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
1920                 pedwarn ("no semicolon at end of struct or union");
1921               else
1922                 {
1923                   c_parser_error (parser, "expected %<;%>");
1924                   c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, NULL);
1925                   break;
1926                 }
1927             }
1928         }
1929       postfix_attrs = c_parser_attributes (parser);
1930       ret.spec = finish_struct (type, nreverse (contents),
1931                                 chainon (attrs, postfix_attrs));
1932       ret.kind = ctsk_tagdef;
1933       return ret;
1934     }
1935   else if (!ident)
1936     {
1937       c_parser_error (parser, "expected %<{%>");
1938       ret.spec = error_mark_node;
1939       ret.kind = ctsk_tagref;
1940       return ret;
1941     }
1942   ret = parser_xref_tag (code, ident);
1943   return ret;
1944 }
1945
1946 /* Parse a struct-declaration (C90 6.5.2.1, C99 6.7.2.1), *without*
1947    the trailing semicolon.
1948
1949    struct-declaration:
1950      specifier-qualifier-list struct-declarator-list
1951
1952    specifier-qualifier-list:
1953      type-specifier specifier-qualifier-list[opt]
1954      type-qualifier specifier-qualifier-list[opt]
1955      attributes specifier-qualifier-list[opt]
1956
1957    struct-declarator-list:
1958      struct-declarator
1959      struct-declarator-list , attributes[opt] struct-declarator
1960
1961    struct-declarator:
1962      declarator attributes[opt]
1963      declarator[opt] : constant-expression attributes[opt]
1964
1965    GNU extensions:
1966
1967    struct-declaration:
1968      __extension__ struct-declaration
1969      specifier-qualifier-list
1970
1971    Unlike the ISO C syntax, semicolons are handled elsewhere.  The use
1972    of attributes where shown is a GNU extension.  In GNU C, we accept
1973    any expression without commas in the syntax (assignment
1974    expressions, not just conditional expressions); assignment
1975    expressions will be diagnosed as non-constant.  */
1976
1977 static tree
1978 c_parser_struct_declaration (c_parser *parser)
1979 {
1980   struct c_declspecs *specs;
1981   tree prefix_attrs;
1982   tree all_prefix_attrs;
1983   tree decls;
1984   if (c_parser_next_token_is_keyword (parser, RID_EXTENSION))
1985     {
1986       int ext;
1987       tree decl;
1988       ext = disable_extension_diagnostics ();
1989       c_parser_consume_token (parser);
1990       decl = c_parser_struct_declaration (parser);
1991       restore_extension_diagnostics (ext);
1992       return decl;
1993     }
1994   specs = build_null_declspecs ();
1995   c_parser_declspecs (parser, specs, false, true, true);
1996   if (parser->error)
1997     return NULL_TREE;
1998   if (!specs->declspecs_seen_p)
1999     {
2000       c_parser_error (parser, "expected specifier-qualifier-list");
2001       return NULL_TREE;
2002     }
2003   finish_declspecs (specs);
2004   if (c_parser_next_token_is (parser, CPP_SEMICOLON))
2005     {
2006       tree ret;
2007       if (!specs->type_seen_p)
2008         {
2009           if (pedantic)
2010             pedwarn ("ISO C forbids member declarations with no members");
2011           shadow_tag_warned (specs, pedantic);
2012           ret = NULL_TREE;
2013         }
2014       else
2015         {
2016           /* Support for unnamed structs or unions as members of
2017              structs or unions (which is [a] useful and [b] supports
2018              MS P-SDK).  */
2019           ret = grokfield (build_id_declarator (NULL_TREE), specs, NULL_TREE);
2020         }
2021       return ret;
2022     }
2023   pending_xref_error ();
2024   prefix_attrs = specs->attrs;
2025   all_prefix_attrs = prefix_attrs;
2026   specs->attrs = NULL_TREE;
2027   decls = NULL_TREE;
2028   while (true)
2029     {
2030       /* Declaring one or more declarators or un-named bit-fields.  */
2031       struct c_declarator *declarator;
2032       bool dummy = false;
2033       if (c_parser_next_token_is (parser, CPP_COLON))
2034         declarator = build_id_declarator (NULL_TREE);
2035       else
2036         declarator = c_parser_declarator (parser, specs->type_seen_p,
2037                                           C_DTR_NORMAL, &dummy);
2038       if (declarator == NULL)
2039         {
2040           c_parser_skip_to_end_of_block_or_statement (parser);
2041           break;
2042         }
2043       if (c_parser_next_token_is (parser, CPP_COLON)
2044           || c_parser_next_token_is (parser, CPP_COMMA)
2045           || c_parser_next_token_is (parser, CPP_SEMICOLON)
2046           || c_parser_next_token_is (parser, CPP_CLOSE_BRACE)
2047           || c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
2048         {
2049           tree postfix_attrs = NULL_TREE;
2050           tree width = NULL_TREE;
2051           tree d;
2052           if (c_parser_next_token_is (parser, CPP_COLON))
2053             {
2054               c_parser_consume_token (parser);
2055               width = c_parser_expr_no_commas (parser, NULL).value;
2056             }
2057           if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
2058             postfix_attrs = c_parser_attributes (parser);
2059           d = grokfield (declarator, specs, width);
2060           decl_attributes (&d, chainon (postfix_attrs,
2061                                         all_prefix_attrs), 0);
2062           TREE_CHAIN (d) = decls;
2063           decls = d;
2064           if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
2065             all_prefix_attrs = chainon (c_parser_attributes (parser),
2066                                         prefix_attrs);
2067           else
2068             all_prefix_attrs = prefix_attrs;
2069           if (c_parser_next_token_is (parser, CPP_COMMA))
2070             c_parser_consume_token (parser);
2071           else if (c_parser_next_token_is (parser, CPP_SEMICOLON)
2072                    || c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
2073             {
2074               /* Semicolon consumed in caller.  */
2075               break;
2076             }
2077           else
2078             {
2079               c_parser_error (parser, "expected %<,%>, %<;%> or %<}%>");
2080               break;
2081             }
2082         }
2083       else
2084         {
2085           c_parser_error (parser,
2086                           "expected %<:%>, %<,%>, %<;%>, %<}%> or "
2087                           "%<__attribute__%>");
2088           break;
2089         }
2090     }
2091   return decls;
2092 }
2093
2094 /* Parse a typeof specifier (a GNU extension).
2095
2096    typeof-specifier:
2097      typeof ( expression )
2098      typeof ( type-name )
2099 */
2100
2101 static struct c_typespec
2102 c_parser_typeof_specifier (c_parser *parser)
2103 {
2104   struct c_typespec ret;
2105   ret.kind = ctsk_typeof;
2106   ret.spec = error_mark_node;
2107   gcc_assert (c_parser_next_token_is_keyword (parser, RID_TYPEOF));
2108   c_parser_consume_token (parser);
2109   skip_evaluation++;
2110   in_typeof++;
2111   if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
2112     {
2113       skip_evaluation--;
2114       in_typeof--;
2115       return ret;
2116     }
2117   if (c_parser_next_token_starts_typename (parser))
2118     {
2119       struct c_type_name *type = c_parser_type_name (parser);
2120       skip_evaluation--;
2121       in_typeof--;
2122       if (type != NULL)
2123         {
2124           ret.spec = groktypename (type);
2125           pop_maybe_used (variably_modified_type_p (ret.spec, NULL_TREE));
2126         }
2127     }
2128   else
2129     {
2130       bool was_vm;
2131       struct c_expr expr = c_parser_expression (parser);
2132       skip_evaluation--;
2133       in_typeof--;
2134       if (TREE_CODE (expr.value) == COMPONENT_REF
2135           && DECL_C_BIT_FIELD (TREE_OPERAND (expr.value, 1)))
2136         error ("%<typeof%> applied to a bit-field");
2137       ret.spec = TREE_TYPE (expr.value);
2138       was_vm = variably_modified_type_p (ret.spec, NULL_TREE);
2139       /* This should be returned with the type so that when the type
2140          is evaluated, this can be evaluated.  For now, we avoid
2141          evaluation when the context might.  */
2142       if (!skip_evaluation && was_vm)
2143         {
2144           tree e = expr.value;
2145
2146           /* If the expression is not of a type to which we cannot assign a line
2147              number, wrap the thing in a no-op NOP_EXPR.  */
2148           if (DECL_P (e) || CONSTANT_CLASS_P (e))
2149             e = build1 (NOP_EXPR, void_type_node, e);
2150
2151           if (CAN_HAVE_LOCATION_P (e))
2152             SET_EXPR_LOCATION (e, input_location);
2153
2154           add_stmt (e);
2155         }
2156       pop_maybe_used (was_vm);
2157     }
2158   c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
2159   return ret;
2160 }
2161
2162 /* Parse a declarator, possibly an abstract declarator (C90 6.5.4,
2163    6.5.5, C99 6.7.5, 6.7.6).  If TYPE_SEEN_P then a typedef name may
2164    be redeclared; otherwise it may not.  KIND indicates which kind of
2165    declarator is wanted.  Returns a valid declarator except in the
2166    case of a syntax error in which case NULL is returned.  *SEEN_ID is
2167    set to true if an identifier being declared is seen; this is used
2168    to diagnose bad forms of abstract array declarators and to
2169    determine whether an identifier list is syntactically permitted.
2170
2171    declarator:
2172      pointer[opt] direct-declarator
2173
2174    direct-declarator:
2175      identifier
2176      ( attributes[opt] declarator )
2177      direct-declarator array-declarator
2178      direct-declarator ( parameter-type-list )
2179      direct-declarator ( identifier-list[opt] )
2180
2181    pointer:
2182      * type-qualifier-list[opt]
2183      * type-qualifier-list[opt] pointer
2184
2185    type-qualifier-list:
2186      type-qualifier
2187      attributes
2188      type-qualifier-list type-qualifier
2189      type-qualifier-list attributes
2190
2191    parameter-type-list:
2192      parameter-list
2193      parameter-list , ...
2194
2195    parameter-list:
2196      parameter-declaration
2197      parameter-list , parameter-declaration
2198
2199    parameter-declaration:
2200      declaration-specifiers declarator attributes[opt]
2201      declaration-specifiers abstract-declarator[opt] attributes[opt]
2202
2203    identifier-list:
2204      identifier
2205      identifier-list , identifier
2206
2207    abstract-declarator:
2208      pointer
2209      pointer[opt] direct-abstract-declarator
2210
2211    direct-abstract-declarator:
2212      ( attributes[opt] abstract-declarator )
2213      direct-abstract-declarator[opt] array-declarator
2214      direct-abstract-declarator[opt] ( parameter-type-list[opt] )
2215
2216    GNU extensions:
2217
2218    direct-declarator:
2219      direct-declarator ( parameter-forward-declarations
2220                          parameter-type-list[opt] )
2221
2222    direct-abstract-declarator:
2223      direct-abstract-declarator[opt] ( parameter-forward-declarations
2224                                        parameter-type-list[opt] )
2225
2226    parameter-forward-declarations:
2227      parameter-list ;
2228      parameter-forward-declarations parameter-list ;
2229
2230    The uses of attributes shown above are GNU extensions.
2231
2232    Some forms of array declarator are not included in C99 in the
2233    syntax for abstract declarators; these are disallowed elsewhere.
2234    This may be a defect (DR#289).
2235
2236    This function also accepts an omitted abstract declarator as being
2237    an abstract declarator, although not part of the formal syntax.  */
2238
2239 static struct c_declarator *
2240 c_parser_declarator (c_parser *parser, bool type_seen_p, c_dtr_syn kind,
2241                      bool *seen_id)
2242 {
2243   /* Parse any initial pointer part.  */
2244   if (c_parser_next_token_is (parser, CPP_MULT))
2245     {
2246       struct c_declspecs *quals_attrs = build_null_declspecs ();
2247       struct c_declarator *inner;
2248       c_parser_consume_token (parser);
2249       c_parser_declspecs (parser, quals_attrs, false, false, true);
2250       inner = c_parser_declarator (parser, type_seen_p, kind, seen_id);
2251       if (inner == NULL)
2252         return NULL;
2253       else
2254         return make_pointer_declarator (quals_attrs, inner);
2255     }
2256   /* Now we have a direct declarator, direct abstract declarator or
2257      nothing (which counts as a direct abstract declarator here).  */
2258   return c_parser_direct_declarator (parser, type_seen_p, kind, seen_id);
2259 }
2260
2261 /* Parse a direct declarator or direct abstract declarator; arguments
2262    as c_parser_declarator.  */
2263
2264 static struct c_declarator *
2265 c_parser_direct_declarator (c_parser *parser, bool type_seen_p, c_dtr_syn kind,
2266                             bool *seen_id)
2267 {
2268   /* The direct declarator must start with an identifier (possibly
2269      omitted) or a parenthesized declarator (possibly abstract).  In
2270      an ordinary declarator, initial parentheses must start a
2271      parenthesized declarator.  In an abstract declarator or parameter
2272      declarator, they could start a parenthesized declarator or a
2273      parameter list.  To tell which, the open parenthesis and any
2274      following attributes must be read.  If a declaration specifier
2275      follows, then it is a parameter list; if the specifier is a
2276      typedef name, there might be an ambiguity about redeclaring it,
2277      which is resolved in the direction of treating it as a typedef
2278      name.  If a close parenthesis follows, it is also an empty
2279      parameter list, as the syntax does not permit empty abstract
2280      declarators.  Otherwise, it is a parenthesized declarator (in
2281      which case the analysis may be repeated inside it, recursively).
2282
2283      ??? There is an ambiguity in a parameter declaration "int
2284      (__attribute__((foo)) x)", where x is not a typedef name: it
2285      could be an abstract declarator for a function, or declare x with
2286      parentheses.  The proper resolution of this ambiguity needs
2287      documenting.  At present we follow an accident of the old
2288      parser's implementation, whereby the first parameter must have
2289      some declaration specifiers other than just attributes.  Thus as
2290      a parameter declaration it is treated as a parenthesized
2291      parameter named x, and as an abstract declarator it is
2292      rejected.
2293
2294      ??? Also following the old parser, attributes inside an empty
2295      parameter list are ignored, making it a list not yielding a
2296      prototype, rather than giving an error or making it have one
2297      parameter with implicit type int.
2298
2299      ??? Also following the old parser, typedef names may be
2300      redeclared in declarators, but not Objective-C class names.  */
2301
2302   if (kind != C_DTR_ABSTRACT
2303       && c_parser_next_token_is (parser, CPP_NAME)
2304       && ((type_seen_p
2305            && c_parser_peek_token (parser)->id_kind == C_ID_TYPENAME)
2306           || c_parser_peek_token (parser)->id_kind == C_ID_ID))
2307     {
2308       struct c_declarator *inner
2309         = build_id_declarator (c_parser_peek_token (parser)->value);
2310       *seen_id = true;
2311       inner->id_loc = c_parser_peek_token (parser)->location;
2312       c_parser_consume_token (parser);
2313       return c_parser_direct_declarator_inner (parser, *seen_id, inner);
2314     }
2315
2316   if (kind != C_DTR_NORMAL
2317       && c_parser_next_token_is (parser, CPP_OPEN_SQUARE))
2318     {
2319       struct c_declarator *inner = build_id_declarator (NULL_TREE);
2320       return c_parser_direct_declarator_inner (parser, *seen_id, inner);
2321     }
2322
2323   /* Either we are at the end of an abstract declarator, or we have
2324      parentheses.  */
2325
2326   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
2327     {
2328       tree attrs;
2329       struct c_declarator *inner;
2330       c_parser_consume_token (parser);
2331       attrs = c_parser_attributes (parser);
2332       if (kind != C_DTR_NORMAL
2333           && (c_parser_next_token_starts_declspecs (parser)
2334               || c_parser_next_token_is (parser, CPP_CLOSE_PAREN)))
2335         {
2336           struct c_arg_info *args
2337             = c_parser_parms_declarator (parser, kind == C_DTR_NORMAL,
2338                                          attrs);
2339           if (args == NULL)
2340             return NULL;
2341           else
2342             {
2343               inner
2344                 = build_function_declarator (args,
2345                                              build_id_declarator (NULL_TREE));
2346               return c_parser_direct_declarator_inner (parser, *seen_id,
2347                                                        inner);
2348             }
2349         }
2350       /* A parenthesized declarator.  */
2351       inner = c_parser_declarator (parser, type_seen_p, kind, seen_id);
2352       if (inner != NULL && attrs != NULL)
2353         inner = build_attrs_declarator (attrs, inner);
2354       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2355         {
2356           c_parser_consume_token (parser);
2357           if (inner == NULL)
2358             return NULL;
2359           else
2360             return c_parser_direct_declarator_inner (parser, *seen_id, inner);
2361         }
2362       else
2363         {
2364           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
2365                                      "expected %<)%>");
2366           return NULL;
2367         }
2368     }
2369   else
2370     {
2371       if (kind == C_DTR_NORMAL)
2372         {
2373           c_parser_error (parser, "expected identifier or %<(%>");
2374           return NULL;
2375         }
2376       else
2377         return build_id_declarator (NULL_TREE);
2378     }
2379 }
2380
2381 /* Parse part of a direct declarator or direct abstract declarator,
2382    given that some (in INNER) has already been parsed; ID_PRESENT is
2383    true if an identifier is present, false for an abstract
2384    declarator.  */
2385
2386 static struct c_declarator *
2387 c_parser_direct_declarator_inner (c_parser *parser, bool id_present,
2388                                   struct c_declarator *inner)
2389 {
2390   /* Parse a sequence of array declarators and parameter lists.  */
2391   if (c_parser_next_token_is (parser, CPP_OPEN_SQUARE))
2392     {
2393       struct c_declarator *declarator;
2394       struct c_declspecs *quals_attrs = build_null_declspecs ();
2395       bool static_seen;
2396       bool star_seen;
2397       tree dimen;
2398       c_parser_consume_token (parser);
2399       c_parser_declspecs (parser, quals_attrs, false, false, true);
2400       static_seen = c_parser_next_token_is_keyword (parser, RID_STATIC);
2401       if (static_seen)
2402         c_parser_consume_token (parser);
2403       if (static_seen && !quals_attrs->declspecs_seen_p)
2404         c_parser_declspecs (parser, quals_attrs, false, false, true);
2405       if (!quals_attrs->declspecs_seen_p)
2406         quals_attrs = NULL;
2407       /* If "static" is present, there must be an array dimension.
2408          Otherwise, there may be a dimension, "*", or no
2409          dimension.  */
2410       if (static_seen)
2411         {
2412           star_seen = false;
2413           dimen = c_parser_expr_no_commas (parser, NULL).value;
2414         }
2415       else
2416         {
2417           if (c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
2418             {
2419               dimen = NULL_TREE;
2420               star_seen = false;
2421             }
2422           else if (c_parser_next_token_is (parser, CPP_MULT))
2423             {
2424               if (c_parser_peek_2nd_token (parser)->type == CPP_CLOSE_SQUARE)
2425                 {
2426                   dimen = NULL_TREE;
2427                   star_seen = true;
2428                   c_parser_consume_token (parser);
2429                 }
2430               else
2431                 {
2432                   star_seen = false;
2433                   dimen = c_parser_expr_no_commas (parser, NULL).value;
2434                 }
2435             }
2436           else
2437             {
2438               star_seen = false;
2439               dimen = c_parser_expr_no_commas (parser, NULL).value;
2440             }
2441         }
2442       if (c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
2443         c_parser_consume_token (parser);
2444       else
2445         {
2446           c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE,
2447                                      "expected %<]%>");
2448           return NULL;
2449         }
2450       declarator = build_array_declarator (dimen, quals_attrs, static_seen,
2451                                            star_seen);
2452       if (declarator == NULL)
2453         return NULL;
2454       inner = set_array_declarator_inner (declarator, inner, !id_present);
2455       return c_parser_direct_declarator_inner (parser, id_present, inner);
2456     }
2457   else if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
2458     {
2459       tree attrs;
2460       struct c_arg_info *args;
2461       c_parser_consume_token (parser);
2462       attrs = c_parser_attributes (parser);
2463       args = c_parser_parms_declarator (parser, id_present, attrs);
2464       if (args == NULL)
2465         return NULL;
2466       else
2467         {
2468           inner = build_function_declarator (args, inner);
2469           return c_parser_direct_declarator_inner (parser, id_present, inner);
2470         }
2471     }
2472   return inner;
2473 }
2474
2475 /* Parse a parameter list or identifier list, including the closing
2476    parenthesis but not the opening one.  ATTRS are the attributes at
2477    the start of the list.  ID_LIST_OK is true if an identifier list is
2478    acceptable; such a list must not have attributes at the start.  */
2479
2480 static struct c_arg_info *
2481 c_parser_parms_declarator (c_parser *parser, bool id_list_ok, tree attrs)
2482 {
2483   push_scope ();
2484   declare_parm_level ();
2485   /* If the list starts with an identifier, it is an identifier list.
2486      Otherwise, it is either a prototype list or an empty list.  */
2487   if (id_list_ok
2488       && !attrs
2489       && c_parser_next_token_is (parser, CPP_NAME)
2490       && c_parser_peek_token (parser)->id_kind == C_ID_ID)
2491     {
2492       tree list = NULL_TREE, *nextp = &list;
2493       while (c_parser_next_token_is (parser, CPP_NAME)
2494              && c_parser_peek_token (parser)->id_kind == C_ID_ID)
2495         {
2496           *nextp = build_tree_list (NULL_TREE,
2497                                     c_parser_peek_token (parser)->value);
2498           nextp = & TREE_CHAIN (*nextp);
2499           c_parser_consume_token (parser);
2500           if (c_parser_next_token_is_not (parser, CPP_COMMA))
2501             break;
2502           c_parser_consume_token (parser);
2503           if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2504             {
2505               c_parser_error (parser, "expected identifier");
2506               break;
2507             }
2508         }
2509       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2510         {
2511           struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
2512           ret->parms = 0;
2513           ret->tags = 0;
2514           ret->types = list;
2515           ret->others = 0;
2516           ret->pending_sizes = 0;
2517           ret->had_vla_unspec = 0;
2518           c_parser_consume_token (parser);
2519           pop_scope ();
2520           return ret;
2521         }
2522       else
2523         {
2524           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
2525                                      "expected %<)%>");
2526           pop_scope ();
2527           return NULL;
2528         }
2529     }
2530   else
2531     {
2532       struct c_arg_info *ret = c_parser_parms_list_declarator (parser, attrs);
2533       pop_scope ();
2534       return ret;
2535     }
2536 }
2537
2538 /* Parse a parameter list (possibly empty), including the closing
2539    parenthesis but not the opening one.  ATTRS are the attributes at
2540    the start of the list.  */
2541
2542 static struct c_arg_info *
2543 c_parser_parms_list_declarator (c_parser *parser, tree attrs)
2544 {
2545   bool good_parm = false;
2546   /* ??? Following the old parser, forward parameter declarations may
2547      use abstract declarators, and if no real parameter declarations
2548      follow the forward declarations then this is not diagnosed.  Also
2549      note as above that attributes are ignored as the only contents of
2550      the parentheses, or as the only contents after forward
2551      declarations.  */
2552   if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2553     {
2554       struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
2555       ret->parms = 0;
2556       ret->tags = 0;
2557       ret->types = 0;
2558       ret->others = 0;
2559       ret->pending_sizes = 0;
2560       ret->had_vla_unspec = 0;
2561       c_parser_consume_token (parser);
2562       return ret;
2563     }
2564   if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
2565     {
2566       struct c_arg_info *ret = XOBNEW (&parser_obstack, struct c_arg_info);
2567       ret->parms = 0;
2568       ret->tags = 0;
2569       ret->others = 0;
2570       ret->pending_sizes = 0;
2571       ret->had_vla_unspec = 0;
2572       /* Suppress -Wold-style-definition for this case.  */
2573       ret->types = error_mark_node;
2574       error ("ISO C requires a named argument before %<...%>");
2575       c_parser_consume_token (parser);
2576       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2577         {
2578           c_parser_consume_token (parser);
2579           return ret;
2580         }
2581       else
2582         {
2583           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
2584                                      "expected %<)%>");
2585           return NULL;
2586         }
2587     }
2588   /* Nonempty list of parameters, either terminated with semicolon
2589      (forward declarations; recurse) or with close parenthesis (normal
2590      function) or with ", ... )" (variadic function).  */
2591   while (true)
2592     {
2593       /* Parse a parameter.  */
2594       struct c_parm *parm = c_parser_parameter_declaration (parser, attrs);
2595       attrs = NULL_TREE;
2596       if (parm != NULL)
2597         {
2598           good_parm = true;
2599           push_parm_decl (parm);
2600         }
2601       if (c_parser_next_token_is (parser, CPP_SEMICOLON))
2602         {
2603           tree new_attrs;
2604           c_parser_consume_token (parser);
2605           mark_forward_parm_decls ();
2606           new_attrs = c_parser_attributes (parser);
2607           return c_parser_parms_list_declarator (parser, new_attrs);
2608         }
2609       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2610         {
2611           c_parser_consume_token (parser);
2612           if (good_parm)
2613             return get_parm_info (false);
2614           else
2615             {
2616               struct c_arg_info *ret
2617                 = XOBNEW (&parser_obstack, struct c_arg_info);
2618               ret->parms = 0;
2619               ret->tags = 0;
2620               ret->types = 0;
2621               ret->others = 0;
2622               ret->pending_sizes = 0;
2623               ret->had_vla_unspec = 0;
2624               return ret;
2625             }
2626         }
2627       if (!c_parser_require (parser, CPP_COMMA,
2628                              "expected %<;%>, %<,%> or %<)%>"))
2629         {
2630           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
2631           return NULL;
2632         }
2633       if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
2634         {
2635           c_parser_consume_token (parser);
2636           if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2637             {
2638               c_parser_consume_token (parser);
2639               if (good_parm)
2640                 return get_parm_info (true);
2641               else
2642                 {
2643                   struct c_arg_info *ret
2644                     = XOBNEW (&parser_obstack, struct c_arg_info);
2645                   ret->parms = 0;
2646                   ret->tags = 0;
2647                   ret->types = 0;
2648                   ret->others = 0;
2649                   ret->pending_sizes = 0;
2650                   ret->had_vla_unspec = 0;
2651                   return ret;
2652                 }
2653             }
2654           else
2655             {
2656               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
2657                                          "expected %<)%>");
2658               return NULL;
2659             }
2660         }
2661     }
2662 }
2663
2664 /* Parse a parameter declaration.  ATTRS are the attributes at the
2665    start of the declaration if it is the first parameter.  */
2666
2667 static struct c_parm *
2668 c_parser_parameter_declaration (c_parser *parser, tree attrs)
2669 {
2670   struct c_declspecs *specs;
2671   struct c_declarator *declarator;
2672   tree prefix_attrs;
2673   tree postfix_attrs = NULL_TREE;
2674   bool dummy = false;
2675   if (!c_parser_next_token_starts_declspecs (parser))
2676     {
2677       /* ??? In some Objective-C cases '...' isn't applicable so there
2678          should be a different message.  */
2679       c_parser_error (parser,
2680                       "expected declaration specifiers or %<...%>");
2681       c_parser_skip_to_end_of_parameter (parser);
2682       return NULL;
2683     }
2684   specs = build_null_declspecs ();
2685   if (attrs)
2686     {
2687       declspecs_add_attrs (specs, attrs);
2688       attrs = NULL_TREE;
2689     }
2690   c_parser_declspecs (parser, specs, true, true, true);
2691   finish_declspecs (specs);
2692   pending_xref_error ();
2693   prefix_attrs = specs->attrs;
2694   specs->attrs = NULL_TREE;
2695   declarator = c_parser_declarator (parser, specs->type_seen_p,
2696                                     C_DTR_PARM, &dummy);
2697   if (declarator == NULL)
2698     {
2699       c_parser_skip_until_found (parser, CPP_COMMA, NULL);
2700       return NULL;
2701     }
2702   if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
2703     postfix_attrs = c_parser_attributes (parser);
2704   return build_c_parm (specs, chainon (postfix_attrs, prefix_attrs),
2705                        declarator);
2706 }
2707
2708 /* Parse a string literal in an asm expression.  It should not be
2709    translated, and wide string literals are an error although
2710    permitted by the syntax.  This is a GNU extension.
2711
2712    asm-string-literal:
2713      string-literal
2714
2715    ??? At present, following the old parser, the caller needs to have
2716    set c_lex_string_translate to 0.  It would be better to follow the
2717    C++ parser rather than using the c_lex_string_translate kludge.  */
2718
2719 static tree
2720 c_parser_asm_string_literal (c_parser *parser)
2721 {
2722   tree str;
2723   if (c_parser_next_token_is (parser, CPP_STRING))
2724     {
2725       str = c_parser_peek_token (parser)->value;
2726       c_parser_consume_token (parser);
2727     }
2728   else if (c_parser_next_token_is (parser, CPP_WSTRING))
2729     {
2730       error ("wide string literal in %<asm%>");
2731       str = build_string (1, "");
2732       c_parser_consume_token (parser);
2733     }
2734   else
2735     {
2736       c_parser_error (parser, "expected string literal");
2737       str = NULL_TREE;
2738     }
2739   return str;
2740 }
2741
2742 /* Parse a simple asm expression.  This is used in restricted
2743    contexts, where a full expression with inputs and outputs does not
2744    make sense.  This is a GNU extension.
2745
2746    simple-asm-expr:
2747      asm ( asm-string-literal )
2748 */
2749
2750 static tree
2751 c_parser_simple_asm_expr (c_parser *parser)
2752 {
2753   tree str;
2754   gcc_assert (c_parser_next_token_is_keyword (parser, RID_ASM));
2755   /* ??? Follow the C++ parser rather than using the
2756      c_lex_string_translate kludge.  */
2757   c_lex_string_translate = 0;
2758   c_parser_consume_token (parser);
2759   if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
2760     {
2761       c_lex_string_translate = 1;
2762       return NULL_TREE;
2763     }
2764   str = c_parser_asm_string_literal (parser);
2765   c_lex_string_translate = 1;
2766   if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
2767     {
2768       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
2769       return NULL_TREE;
2770     }
2771   return str;
2772 }
2773
2774 /* Parse (possibly empty) attributes.  This is a GNU extension.
2775
2776    attributes:
2777      empty
2778      attributes attribute
2779
2780    attribute:
2781      __attribute__ ( ( attribute-list ) )
2782
2783    attribute-list:
2784      attrib
2785      attribute_list , attrib
2786
2787    attrib:
2788      empty
2789      any-word
2790      any-word ( identifier )
2791      any-word ( identifier , nonempty-expr-list )
2792      any-word ( expr-list )
2793
2794    where the "identifier" must not be declared as a type, and
2795    "any-word" may be any identifier (including one declared as a
2796    type), a reserved word storage class specifier, type specifier or
2797    type qualifier.  ??? This still leaves out most reserved keywords
2798    (following the old parser), shouldn't we include them, and why not
2799    allow identifiers declared as types to start the arguments?  */
2800
2801 static tree
2802 c_parser_attributes (c_parser *parser)
2803 {
2804   tree attrs = NULL_TREE;
2805   while (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
2806     {
2807       /* ??? Follow the C++ parser rather than using the
2808          c_lex_string_translate kludge.  */
2809       c_lex_string_translate = 0;
2810       c_parser_consume_token (parser);
2811       if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
2812         {
2813           c_lex_string_translate = 1;
2814           return attrs;
2815         }
2816       if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
2817         {
2818           c_lex_string_translate = 1;
2819           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
2820           return attrs;
2821         }
2822       /* Parse the attribute list.  */
2823       while (c_parser_next_token_is (parser, CPP_COMMA)
2824              || c_parser_next_token_is (parser, CPP_NAME)
2825              || c_parser_next_token_is (parser, CPP_KEYWORD))
2826         {
2827           tree attr, attr_name, attr_args;
2828           if (c_parser_next_token_is (parser, CPP_COMMA))
2829             {
2830               c_parser_consume_token (parser);
2831               continue;
2832             }
2833           if (c_parser_next_token_is (parser, CPP_KEYWORD))
2834             {
2835               /* ??? See comment above about what keywords are
2836                  accepted here.  */
2837               bool ok;
2838               switch (c_parser_peek_token (parser)->keyword)
2839                 {
2840                 case RID_STATIC:
2841                 case RID_UNSIGNED:
2842                 case RID_LONG:
2843                 case RID_CONST:
2844                 case RID_EXTERN:
2845                 case RID_REGISTER:
2846                 case RID_TYPEDEF:
2847                 case RID_SHORT:
2848                 case RID_INLINE:
2849                 case RID_VOLATILE:
2850                 case RID_SIGNED:
2851                 case RID_AUTO:
2852                 case RID_RESTRICT:
2853                 case RID_COMPLEX:
2854                 case RID_THREAD:
2855                 case RID_INT:
2856                 case RID_CHAR:
2857                 case RID_FLOAT:
2858                 case RID_DOUBLE:
2859                 case RID_VOID:
2860                 case RID_DFLOAT32:
2861                 case RID_DFLOAT64:
2862                 case RID_DFLOAT128:
2863                 case RID_BOOL:
2864                   ok = true;
2865                   break;
2866                 default:
2867                   ok = false;
2868                   break;
2869                 }
2870               if (!ok)
2871                 break;
2872             }
2873           attr_name = c_parser_peek_token (parser)->value;
2874           c_parser_consume_token (parser);
2875           if (c_parser_next_token_is_not (parser, CPP_OPEN_PAREN))
2876             {
2877               attr = build_tree_list (attr_name, NULL_TREE);
2878               attrs = chainon (attrs, attr);
2879               continue;
2880             }
2881           c_parser_consume_token (parser);
2882           /* Parse the attribute contents.  If they start with an
2883              identifier which is followed by a comma or close
2884              parenthesis, then the arguments start with that
2885              identifier; otherwise they are an expression list.  */
2886           if (c_parser_next_token_is (parser, CPP_NAME)
2887               && c_parser_peek_token (parser)->id_kind == C_ID_ID
2888               && ((c_parser_peek_2nd_token (parser)->type == CPP_COMMA)
2889                   || (c_parser_peek_2nd_token (parser)->type
2890                       == CPP_CLOSE_PAREN)))
2891             {
2892               tree arg1 = c_parser_peek_token (parser)->value;
2893               c_parser_consume_token (parser);
2894               if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2895                 attr_args = build_tree_list (NULL_TREE, arg1);
2896               else
2897                 {
2898                   c_parser_consume_token (parser);
2899                   attr_args = tree_cons (NULL_TREE, arg1,
2900                                          c_parser_expr_list (parser, false));
2901                 }
2902             }
2903           else
2904             {
2905               if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2906                 attr_args = NULL_TREE;
2907               else
2908                 attr_args = c_parser_expr_list (parser, false);
2909             }
2910           attr = build_tree_list (attr_name, attr_args);
2911           if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2912             c_parser_consume_token (parser);
2913           else
2914             {
2915               c_lex_string_translate = 1;
2916               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
2917                                          "expected %<)%>");
2918               return attrs;
2919             }
2920           attrs = chainon (attrs, attr);
2921         }
2922       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2923         c_parser_consume_token (parser);
2924       else
2925         {
2926           c_lex_string_translate = 1;
2927           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
2928                                      "expected %<)%>");
2929           return attrs;
2930         }
2931       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
2932         c_parser_consume_token (parser);
2933       else
2934         {
2935           c_lex_string_translate = 1;
2936           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
2937                                      "expected %<)%>");
2938           return attrs;
2939         }
2940       c_lex_string_translate = 1;
2941     }
2942   return attrs;
2943 }
2944
2945 /* Parse a type name (C90 6.5.5, C99 6.7.6).
2946
2947    type-name:
2948      specifier-qualifier-list abstract-declarator[opt]
2949 */
2950
2951 static struct c_type_name *
2952 c_parser_type_name (c_parser *parser)
2953 {
2954   struct c_declspecs *specs = build_null_declspecs ();
2955   struct c_declarator *declarator;
2956   struct c_type_name *ret;
2957   bool dummy = false;
2958   c_parser_declspecs (parser, specs, false, true, true);
2959   if (!specs->declspecs_seen_p)
2960     {
2961       c_parser_error (parser, "expected specifier-qualifier-list");
2962       return NULL;
2963     }
2964   pending_xref_error ();
2965   finish_declspecs (specs);
2966   declarator = c_parser_declarator (parser, specs->type_seen_p,
2967                                     C_DTR_ABSTRACT, &dummy);
2968   if (declarator == NULL)
2969     return NULL;
2970   ret = XOBNEW (&parser_obstack, struct c_type_name);
2971   ret->specs = specs;
2972   ret->declarator = declarator;
2973   return ret;
2974 }
2975
2976 /* Parse an initializer (C90 6.5.7, C99 6.7.8).
2977
2978    initializer:
2979      assignment-expression
2980      { initializer-list }
2981      { initializer-list , }
2982
2983    initializer-list:
2984      designation[opt] initializer
2985      initializer-list , designation[opt] initializer
2986
2987    designation:
2988      designator-list =
2989
2990    designator-list:
2991      designator
2992      designator-list designator
2993
2994    designator:
2995      array-designator
2996      . identifier
2997
2998    array-designator:
2999      [ constant-expression ]
3000
3001    GNU extensions:
3002
3003    initializer:
3004      { }
3005
3006    designation:
3007      array-designator
3008      identifier :
3009
3010    array-designator:
3011      [ constant-expression ... constant-expression ]
3012
3013    Any expression without commas is accepted in the syntax for the
3014    constant-expressions, with non-constant expressions rejected later.
3015
3016    This function is only used for top-level initializers; for nested
3017    ones, see c_parser_initval.  */
3018
3019 static struct c_expr
3020 c_parser_initializer (c_parser *parser)
3021 {
3022   if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
3023     return c_parser_braced_init (parser, NULL_TREE, false);
3024   else
3025     {
3026       struct c_expr ret;
3027       ret = c_parser_expr_no_commas (parser, NULL);
3028       if (TREE_CODE (ret.value) != STRING_CST
3029           && TREE_CODE (ret.value) != COMPOUND_LITERAL_EXPR)
3030         ret = default_function_array_conversion (ret);
3031       return ret;
3032     }
3033 }
3034
3035 /* Parse a braced initializer list.  TYPE is the type specified for a
3036    compound literal, and NULL_TREE for other initializers and for
3037    nested braced lists.  NESTED_P is true for nested braced lists,
3038    false for the list of a compound literal or the list that is the
3039    top-level initializer in a declaration.  */
3040
3041 static struct c_expr
3042 c_parser_braced_init (c_parser *parser, tree type, bool nested_p)
3043 {
3044   gcc_assert (c_parser_next_token_is (parser, CPP_OPEN_BRACE));
3045   c_parser_consume_token (parser);
3046   if (nested_p)
3047     push_init_level (0);
3048   else
3049     really_start_incremental_init (type);
3050   if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
3051     {
3052       if (pedantic)
3053         pedwarn ("ISO C forbids empty initializer braces");
3054     }
3055   else
3056     {
3057       /* Parse a non-empty initializer list, possibly with a trailing
3058          comma.  */
3059       while (true)
3060         {
3061           c_parser_initelt (parser);
3062           if (parser->error)
3063             break;
3064           if (c_parser_next_token_is (parser, CPP_COMMA))
3065             c_parser_consume_token (parser);
3066           else
3067             break;
3068           if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
3069             break;
3070         }
3071     }
3072   if (c_parser_next_token_is_not (parser, CPP_CLOSE_BRACE))
3073     {
3074       struct c_expr ret;
3075       ret.value = error_mark_node;
3076       ret.original_code = ERROR_MARK;
3077       c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, "expected %<}%>");
3078       return ret;
3079     }
3080   c_parser_consume_token (parser);
3081   return pop_init_level (0);
3082 }
3083
3084 /* Parse a nested initializer, including designators.  */
3085
3086 static void
3087 c_parser_initelt (c_parser *parser)
3088 {
3089   /* Parse any designator or designator list.  A single array
3090      designator may have the subsequent "=" omitted in GNU C, but a
3091      longer list or a structure member designator may not.  */
3092   if (c_parser_next_token_is (parser, CPP_NAME)
3093       && c_parser_peek_2nd_token (parser)->type == CPP_COLON)
3094     {
3095       /* Old-style structure member designator.  */
3096       set_init_label (c_parser_peek_token (parser)->value);
3097       if (pedantic)
3098         pedwarn ("obsolete use of designated initializer with %<:%>");
3099       c_parser_consume_token (parser);
3100       c_parser_consume_token (parser);
3101     }
3102   else
3103     {
3104       /* des_seen is 0 if there have been no designators, 1 if there
3105          has been a single array designator and 2 otherwise.  */
3106       int des_seen = 0;
3107       while (c_parser_next_token_is (parser, CPP_OPEN_SQUARE)
3108              || c_parser_next_token_is (parser, CPP_DOT))
3109         {
3110           int des_prev = des_seen;
3111           if (des_seen < 2)
3112             des_seen++;
3113           if (c_parser_next_token_is (parser, CPP_DOT))
3114             {
3115               des_seen = 2;
3116               c_parser_consume_token (parser);
3117               if (c_parser_next_token_is (parser, CPP_NAME))
3118                 {
3119                   set_init_label (c_parser_peek_token (parser)->value);
3120                   c_parser_consume_token (parser);
3121                 }
3122               else
3123                 {
3124                   struct c_expr init;
3125                   init.value = error_mark_node;
3126                   init.original_code = ERROR_MARK;
3127                   c_parser_error (parser, "expected identifier");
3128                   c_parser_skip_until_found (parser, CPP_COMMA, NULL);
3129                   process_init_element (init);
3130                   return;
3131                 }
3132             }
3133           else
3134             {
3135               tree first, second;
3136               /* ??? Following the old parser, [ objc-receiver
3137                  objc-message-args ] is accepted as an initializer,
3138                  being distinguished from a designator by what follows
3139                  the first assignment expression inside the square
3140                  brackets, but after a first array designator a
3141                  subsequent square bracket is for Objective-C taken to
3142                  start an expression, using the obsolete form of
3143                  designated initializer without '=', rather than
3144                  possibly being a second level of designation: in LALR
3145                  terms, the '[' is shifted rather than reducing
3146                  designator to designator-list.  */
3147               if (des_prev == 1 && c_dialect_objc ())
3148                 {
3149                   des_seen = des_prev;
3150                   break;
3151                 }
3152               if (des_prev == 0 && c_dialect_objc ())
3153                 {
3154                   /* This might be an array designator or an
3155                      Objective-C message expression.  If the former,
3156                      continue parsing here; if the latter, parse the
3157                      remainder of the initializer given the starting
3158                      primary-expression.  ??? It might make sense to
3159                      distinguish when des_prev == 1 as well; see
3160                      previous comment.  */
3161                   tree rec, args;
3162                   struct c_expr mexpr;
3163                   c_parser_consume_token (parser);
3164                   if (c_parser_peek_token (parser)->type == CPP_NAME
3165                       && ((c_parser_peek_token (parser)->id_kind
3166                            == C_ID_TYPENAME)
3167                           || (c_parser_peek_token (parser)->id_kind
3168                               == C_ID_CLASSNAME)))
3169                     {
3170                       /* Type name receiver.  */
3171                       tree id = c_parser_peek_token (parser)->value;
3172                       c_parser_consume_token (parser);
3173                       rec = objc_get_class_reference (id);
3174                       goto parse_message_args;
3175                     }
3176                   first = c_parser_expr_no_commas (parser, NULL).value;
3177                   if (c_parser_next_token_is (parser, CPP_ELLIPSIS)
3178                       || c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
3179                     goto array_desig_after_first;
3180                   /* Expression receiver.  So far only one part
3181                      without commas has been parsed; there might be
3182                      more of the expression.  */
3183                   rec = first;
3184                   while (c_parser_next_token_is (parser, CPP_COMMA))
3185                     {
3186                       struct c_expr next;
3187                       c_parser_consume_token (parser);
3188                       next = c_parser_expr_no_commas (parser, NULL);
3189                       next = default_function_array_conversion (next);
3190                       rec = build_compound_expr (rec, next.value);
3191                     }
3192                 parse_message_args:
3193                   /* Now parse the objc-message-args.  */
3194                   args = c_parser_objc_message_args (parser);
3195                   c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE,
3196                                              "expected %<]%>");
3197                   mexpr.value
3198                     = objc_build_message_expr (build_tree_list (rec, args));
3199                   mexpr.original_code = ERROR_MARK;
3200                   /* Now parse and process the remainder of the
3201                      initializer, starting with this message
3202                      expression as a primary-expression.  */
3203                   c_parser_initval (parser, &mexpr);
3204                   return;
3205                 }
3206               c_parser_consume_token (parser);
3207               first = c_parser_expr_no_commas (parser, NULL).value;
3208             array_desig_after_first:
3209               if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
3210                 {
3211                   c_parser_consume_token (parser);
3212                   second = c_parser_expr_no_commas (parser, NULL).value;
3213                 }
3214               else
3215                 second = NULL_TREE;
3216               if (c_parser_next_token_is (parser, CPP_CLOSE_SQUARE))
3217                 {
3218                   c_parser_consume_token (parser);
3219                   set_init_index (first, second);
3220                   if (pedantic && second)
3221                     pedwarn ("ISO C forbids specifying range of "
3222                              "elements to initialize");
3223                 }
3224               else
3225                 c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE,
3226                                            "expected %<]%>");
3227             }
3228         }
3229       if (des_seen >= 1)
3230         {
3231           if (c_parser_next_token_is (parser, CPP_EQ))
3232             {
3233               if (pedantic && !flag_isoc99)
3234                 pedwarn ("ISO C90 forbids specifying subobject to initialize");
3235               c_parser_consume_token (parser);
3236             }
3237           else
3238             {
3239               if (des_seen == 1)
3240                 {
3241                   if (pedantic)
3242                     pedwarn ("obsolete use of designated initializer "
3243                              "without %<=%>");
3244                 }
3245               else
3246                 {
3247                   struct c_expr init;
3248                   init.value = error_mark_node;
3249                   init.original_code = ERROR_MARK;
3250                   c_parser_error (parser, "expected %<=%>");
3251                   c_parser_skip_until_found (parser, CPP_COMMA, NULL);
3252                   process_init_element (init);
3253                   return;
3254                 }
3255             }
3256         }
3257     }
3258   c_parser_initval (parser, NULL);
3259 }
3260
3261 /* Parse a nested initializer; as c_parser_initializer but parses
3262    initializers within braced lists, after any designators have been
3263    applied.  If AFTER is not NULL then it is an Objective-C message
3264    expression which is the primary-expression starting the
3265    initializer.  */
3266
3267 static void
3268 c_parser_initval (c_parser *parser, struct c_expr *after)
3269 {
3270   struct c_expr init;
3271   gcc_assert (!after || c_dialect_objc ());
3272   if (c_parser_next_token_is (parser, CPP_OPEN_BRACE) && !after)
3273     init = c_parser_braced_init (parser, NULL_TREE, true);
3274   else
3275     {
3276       init = c_parser_expr_no_commas (parser, after);
3277       if (init.value != NULL_TREE
3278           && TREE_CODE (init.value) != STRING_CST
3279           && TREE_CODE (init.value) != COMPOUND_LITERAL_EXPR)
3280         init = default_function_array_conversion (init);
3281     }
3282   process_init_element (init);
3283 }
3284
3285 /* Parse a compound statement (possibly a function body) (C90 6.6.2,
3286    C99 6.8.2).
3287
3288    compound-statement:
3289      { block-item-list[opt] }
3290      { label-declarations block-item-list }
3291
3292    block-item-list:
3293      block-item
3294      block-item-list block-item
3295
3296    block-item:
3297      nested-declaration
3298      statement
3299
3300    nested-declaration:
3301      declaration
3302
3303    GNU extensions:
3304
3305    compound-statement:
3306      { label-declarations block-item-list }
3307
3308    nested-declaration:
3309      __extension__ nested-declaration
3310      nested-function-definition
3311
3312    label-declarations:
3313      label-declaration
3314      label-declarations label-declaration
3315
3316    label-declaration:
3317      __label__ identifier-list ;
3318
3319    Allowing the mixing of declarations and code is new in C99.  The
3320    GNU syntax also permits (not shown above) labels at the end of
3321    compound statements, which yield an error.  We don't allow labels
3322    on declarations; this might seem like a natural extension, but
3323    there would be a conflict between attributes on the label and
3324    prefix attributes on the declaration.  ??? The syntax follows the
3325    old parser in requiring something after label declarations.
3326    Although they are erroneous if the labels declared aren't defined,
3327    is it useful for the syntax to be this way?
3328    
3329    OpenMP:
3330    
3331    block-item:
3332      openmp-directive
3333
3334    openmp-directive:
3335      barrier-directive
3336      flush-directive  */
3337
3338 static tree
3339 c_parser_compound_statement (c_parser *parser)
3340 {
3341   tree stmt;
3342   if (!c_parser_require (parser, CPP_OPEN_BRACE, "expected %<{%>"))
3343     return error_mark_node;
3344   stmt = c_begin_compound_stmt (true);
3345   c_parser_compound_statement_nostart (parser);
3346   return c_end_compound_stmt (stmt, true);
3347 }
3348
3349 /* Parse a compound statement except for the opening brace.  This is
3350    used for parsing both compound statements and statement expressions
3351    (which follow different paths to handling the opening).  */
3352
3353 static void
3354 c_parser_compound_statement_nostart (c_parser *parser)
3355 {
3356   bool last_stmt = false;
3357   bool last_label = false;
3358   if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
3359     {
3360       c_parser_consume_token (parser);
3361       return;
3362     }
3363   if (c_parser_next_token_is_keyword (parser, RID_LABEL))
3364     {
3365       /* Read zero or more forward-declarations for labels that nested
3366          functions can jump to.  */
3367       while (c_parser_next_token_is_keyword (parser, RID_LABEL))
3368         {
3369           c_parser_consume_token (parser);
3370           /* Any identifiers, including those declared as type names,
3371              are OK here.  */
3372           while (true)
3373             {
3374               tree label;
3375               if (c_parser_next_token_is_not (parser, CPP_NAME))
3376                 {
3377                   c_parser_error (parser, "expected identifier");
3378                   break;
3379                 }
3380               label
3381                 = declare_label (c_parser_peek_token (parser)->value);
3382               C_DECLARED_LABEL_FLAG (label) = 1;
3383               add_stmt (build_stmt (DECL_EXPR, label));
3384               c_parser_consume_token (parser);
3385               if (c_parser_next_token_is (parser, CPP_COMMA))
3386                 c_parser_consume_token (parser);
3387               else
3388                 break;
3389             }
3390           c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
3391         }
3392       /* ??? Locating this diagnostic on the token after the
3393          declarations end follows the old parser, but it might be
3394          better to locate it where the declarations start instead.  */
3395       if (pedantic)
3396         pedwarn ("ISO C forbids label declarations");
3397     }
3398   /* We must now have at least one statement, label or declaration.  */
3399   if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
3400     {
3401       c_parser_error (parser, "expected declaration or statement");
3402       c_parser_consume_token (parser);
3403       return;
3404     }
3405   while (c_parser_next_token_is_not (parser, CPP_CLOSE_BRACE))
3406     {
3407       location_t loc = c_parser_peek_token (parser)->location;
3408       if (c_parser_next_token_is_keyword (parser, RID_CASE)
3409           || c_parser_next_token_is_keyword (parser, RID_DEFAULT)
3410           || (c_parser_next_token_is (parser, CPP_NAME)
3411               && c_parser_peek_2nd_token (parser)->type == CPP_COLON))
3412         {
3413           last_label = true;
3414           last_stmt = false;
3415           c_parser_label (parser);
3416         }
3417       else if (!last_label
3418                && c_parser_next_token_starts_declspecs (parser))
3419         {
3420           last_label = false;
3421           c_parser_declaration_or_fndef (parser, true, true, true, true);
3422           if (last_stmt
3423               && ((pedantic && !flag_isoc99)
3424                   || warn_declaration_after_statement))
3425             pedwarn_c90 ("%HISO C90 forbids mixed declarations and code",
3426                          &loc);
3427           last_stmt = false;
3428         }
3429       else if (!last_label
3430                && c_parser_next_token_is_keyword (parser, RID_EXTENSION))
3431         {
3432           /* __extension__ can start a declaration, but is also an
3433              unary operator that can start an expression.  Consume all
3434              but the last of a possible series of __extension__ to
3435              determine which.  */
3436           while (c_parser_peek_2nd_token (parser)->type == CPP_KEYWORD
3437                  && (c_parser_peek_2nd_token (parser)->keyword
3438                      == RID_EXTENSION))
3439             c_parser_consume_token (parser);
3440           if (c_token_starts_declspecs (c_parser_peek_2nd_token (parser)))
3441             {
3442               int ext;
3443               ext = disable_extension_diagnostics ();
3444               c_parser_consume_token (parser);
3445               last_label = false;
3446               c_parser_declaration_or_fndef (parser, true, true, true, true);
3447               /* Following the old parser, __extension__ does not
3448                  disable this diagnostic.  */
3449               restore_extension_diagnostics (ext);
3450               if (last_stmt
3451                   && ((pedantic && !flag_isoc99)
3452                       || warn_declaration_after_statement))
3453                 pedwarn_c90 ("%HISO C90 forbids mixed declarations and code",
3454                              &loc);
3455               last_stmt = false;
3456             }
3457           else
3458             goto statement;
3459         }
3460       else if (c_parser_next_token_is (parser, CPP_PRAGMA))
3461         {
3462           /* External pragmas, and some omp pragmas, are not associated
3463              with regular c code, and so are not to be considered statements
3464              syntactically.  This ensures that the user doesn't put them
3465              places that would turn into syntax errors if the directive
3466              were ignored.  */
3467           if (c_parser_pragma (parser, pragma_compound))
3468             last_label = false, last_stmt = true;
3469         }
3470       else if (c_parser_next_token_is (parser, CPP_EOF))
3471         {
3472           c_parser_error (parser, "expected declaration or statement");
3473           return;
3474         }
3475       else
3476         {
3477         statement:
3478           last_label = false;
3479           last_stmt = true;
3480           c_parser_statement_after_labels (parser);
3481         }
3482
3483       parser->error = false;
3484     }
3485   if (last_label)
3486     error ("label at end of compound statement");
3487   c_parser_consume_token (parser);
3488 }
3489
3490 /* Parse a label (C90 6.6.1, C99 6.8.1).
3491
3492    label:
3493      identifier : attributes[opt]
3494      case constant-expression :
3495      default :
3496
3497    GNU extensions:
3498
3499    label:
3500      case constant-expression ... constant-expression :
3501
3502    The use of attributes on labels is a GNU extension.  The syntax in
3503    GNU C accepts any expressions without commas, non-constant
3504    expressions being rejected later.  */
3505
3506 static void
3507 c_parser_label (c_parser *parser)
3508 {
3509   location_t loc1 = c_parser_peek_token (parser)->location;
3510   tree label = NULL_TREE;
3511   if (c_parser_next_token_is_keyword (parser, RID_CASE))
3512     {
3513       tree exp1, exp2;
3514       c_parser_consume_token (parser);
3515       exp1 = c_parser_expr_no_commas (parser, NULL).value;
3516       if (c_parser_next_token_is (parser, CPP_COLON))
3517         {
3518           c_parser_consume_token (parser);
3519           label = do_case (exp1, NULL_TREE);
3520         }
3521       else if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
3522         {
3523           c_parser_consume_token (parser);
3524           exp2 = c_parser_expr_no_commas (parser, NULL).value;
3525           if (c_parser_require (parser, CPP_COLON, "expected %<:%>"))
3526             label = do_case (exp1, exp2);
3527         }
3528       else
3529         c_parser_error (parser, "expected %<:%> or %<...%>");
3530     }
3531   else if (c_parser_next_token_is_keyword (parser, RID_DEFAULT))
3532     {
3533       c_parser_consume_token (parser);
3534       if (c_parser_require (parser, CPP_COLON, "expected %<:%>"))
3535         label = do_case (NULL_TREE, NULL_TREE);
3536     }
3537   else
3538     {
3539       tree name = c_parser_peek_token (parser)->value;
3540       tree tlab;
3541       location_t loc2;
3542       tree attrs;
3543       gcc_assert (c_parser_next_token_is (parser, CPP_NAME));
3544       c_parser_consume_token (parser);
3545       gcc_assert (c_parser_next_token_is (parser, CPP_COLON));
3546       loc2 = c_parser_peek_token (parser)->location;
3547       c_parser_consume_token (parser);
3548       attrs = c_parser_attributes (parser);
3549       tlab = define_label (loc2, name);
3550       if (tlab)
3551         {
3552           decl_attributes (&tlab, attrs, 0);
3553           label = add_stmt (build_stmt (LABEL_EXPR, tlab));
3554         }
3555     }
3556   if (label)
3557     SET_EXPR_LOCATION (label, loc1);
3558 }
3559
3560 /* Parse a statement (C90 6.6, C99 6.8).
3561
3562    statement:
3563      labeled-statement
3564      compound-statement
3565      expression-statement
3566      selection-statement
3567      iteration-statement
3568      jump-statement
3569
3570    labeled-statement:
3571      label statement
3572
3573    expression-statement:
3574      expression[opt] ;
3575
3576    selection-statement:
3577      if-statement
3578      switch-statement
3579
3580    iteration-statement:
3581      while-statement
3582      do-statement
3583      for-statement
3584
3585    jump-statement:
3586      goto identifier ;
3587      continue ;
3588      break ;
3589      return expression[opt] ;
3590
3591    GNU extensions:
3592
3593    statement:
3594      asm-statement
3595
3596    jump-statement:
3597      goto * expression ;
3598
3599    Objective-C:
3600
3601    statement:
3602      objc-throw-statement
3603      objc-try-catch-statement
3604      objc-synchronized-statement
3605
3606    objc-throw-statement:
3607      @throw expression ;
3608      @throw ;
3609
3610    OpenMP:
3611
3612    statement:
3613      openmp-construct
3614
3615    openmp-construct:
3616      parallel-construct
3617      for-construct
3618      sections-construct
3619      single-construct
3620      parallel-for-construct
3621      parallel-sections-construct
3622      master-construct
3623      critical-construct
3624      atomic-construct
3625      ordered-construct
3626
3627    parallel-construct:
3628      parallel-directive structured-block
3629
3630    for-construct:
3631      for-directive iteration-statement
3632
3633    sections-construct:
3634      sections-directive section-scope
3635
3636    single-construct:
3637      single-directive structured-block
3638
3639    parallel-for-construct:
3640      parallel-for-directive iteration-statement
3641
3642    parallel-sections-construct:
3643      parallel-sections-directive section-scope
3644
3645    master-construct:
3646      master-directive structured-block
3647
3648    critical-construct:
3649      critical-directive structured-block
3650
3651    atomic-construct:
3652      atomic-directive expression-statement
3653
3654    ordered-construct:
3655      ordered-directive structured-block  */
3656
3657 static void
3658 c_parser_statement (c_parser *parser)
3659 {
3660   while (c_parser_next_token_is_keyword (parser, RID_CASE)
3661          || c_parser_next_token_is_keyword (parser, RID_DEFAULT)
3662          || (c_parser_next_token_is (parser, CPP_NAME)
3663              && c_parser_peek_2nd_token (parser)->type == CPP_COLON))
3664     c_parser_label (parser);
3665   c_parser_statement_after_labels (parser);
3666 }
3667
3668 /* Parse a statement, other than a labeled statement.  */
3669
3670 static void
3671 c_parser_statement_after_labels (c_parser *parser)
3672 {
3673   location_t loc = c_parser_peek_token (parser)->location;
3674   tree stmt = NULL_TREE;
3675   switch (c_parser_peek_token (parser)->type)
3676     {
3677     case CPP_OPEN_BRACE:
3678       add_stmt (c_parser_compound_statement (parser));
3679       break;
3680     case CPP_KEYWORD:
3681       switch (c_parser_peek_token (parser)->keyword)
3682         {
3683         case RID_IF:
3684           c_parser_if_statement (parser);
3685           break;
3686         case RID_SWITCH:
3687           c_parser_switch_statement (parser);
3688           break;
3689         case RID_WHILE:
3690           c_parser_while_statement (parser);
3691           break;
3692         case RID_DO:
3693           c_parser_do_statement (parser);
3694           break;
3695         case RID_FOR:
3696           c_parser_for_statement (parser);
3697           break;
3698         case RID_GOTO:
3699           c_parser_consume_token (parser);
3700           if (c_parser_next_token_is (parser, CPP_NAME))
3701             {
3702               stmt = c_finish_goto_label (c_parser_peek_token (parser)->value);
3703               c_parser_consume_token (parser);
3704             }
3705           else if (c_parser_next_token_is (parser, CPP_MULT))
3706             {
3707               c_parser_consume_token (parser);
3708               stmt = c_finish_goto_ptr (c_parser_expression (parser).value);
3709             }
3710           else
3711             c_parser_error (parser, "expected identifier or %<*%>");
3712           goto expect_semicolon;
3713         case RID_CONTINUE:
3714           c_parser_consume_token (parser);
3715           stmt = c_finish_bc_stmt (&c_cont_label, false);
3716           goto expect_semicolon;
3717         case RID_BREAK:
3718           c_parser_consume_token (parser);
3719           stmt = c_finish_bc_stmt (&c_break_label, true);
3720           goto expect_semicolon;
3721         case RID_RETURN:
3722           c_parser_consume_token (parser);
3723           if (c_parser_next_token_is (parser, CPP_SEMICOLON))
3724             {
3725               stmt = c_finish_return (NULL_TREE);
3726               c_parser_consume_token (parser);
3727             }
3728           else
3729             {
3730               stmt = c_finish_return (c_parser_expression_conv (parser).value);
3731               goto expect_semicolon;
3732             }
3733           break;
3734         case RID_ASM:
3735           stmt = c_parser_asm_statement (parser);
3736           break;
3737         case RID_AT_THROW:
3738           gcc_assert (c_dialect_objc ());
3739           c_parser_consume_token (parser);
3740           if (c_parser_next_token_is (parser, CPP_SEMICOLON))
3741             {
3742               stmt = objc_build_throw_stmt (NULL_TREE);
3743               c_parser_consume_token (parser);
3744             }
3745           else
3746             {
3747               stmt
3748                 = objc_build_throw_stmt (c_parser_expression (parser).value);
3749               goto expect_semicolon;
3750             }
3751           break;
3752         case RID_AT_TRY:
3753           gcc_assert (c_dialect_objc ());
3754           c_parser_objc_try_catch_statement (parser);
3755           break;
3756         case RID_AT_SYNCHRONIZED:
3757           gcc_assert (c_dialect_objc ());
3758           c_parser_objc_synchronized_statement (parser);
3759           break;
3760         default:
3761           goto expr_stmt;
3762         }
3763       break;
3764     case CPP_SEMICOLON:
3765       c_parser_consume_token (parser);
3766       break;
3767     case CPP_CLOSE_PAREN:
3768     case CPP_CLOSE_SQUARE:
3769       /* Avoid infinite loop in error recovery:
3770          c_parser_skip_until_found stops at a closing nesting
3771          delimiter without consuming it, but here we need to consume
3772          it to proceed further.  */
3773       c_parser_error (parser, "expected statement");
3774       c_parser_consume_token (parser);
3775       break;
3776     case CPP_PRAGMA:
3777       c_parser_pragma (parser, pragma_stmt);
3778       break;
3779     default:
3780     expr_stmt:
3781       stmt = c_finish_expr_stmt (c_parser_expression_conv (parser).value);
3782     expect_semicolon:
3783       c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
3784       break;
3785     }
3786   /* Two cases cannot and do not have line numbers associated: If stmt
3787      is degenerate, such as "2;", then stmt is an INTEGER_CST, which
3788      cannot hold line numbers.  But that's OK because the statement
3789      will either be changed to a MODIFY_EXPR during gimplification of
3790      the statement expr, or discarded.  If stmt was compound, but
3791      without new variables, we will have skipped the creation of a
3792      BIND and will have a bare STATEMENT_LIST.  But that's OK because
3793      (recursively) all of the component statements should already have
3794      line numbers assigned.  ??? Can we discard no-op statements
3795      earlier?  */
3796   if (stmt && CAN_HAVE_LOCATION_P (stmt))
3797     SET_EXPR_LOCATION (stmt, loc);
3798 }
3799
3800 /* Parse a parenthesized condition from an if, do or while statement.
3801
3802    condition:
3803      ( expression )
3804 */
3805 static tree
3806 c_parser_paren_condition (c_parser *parser)
3807 {
3808   location_t loc;
3809   tree cond;
3810   if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
3811     return error_mark_node;
3812   loc = c_parser_peek_token (parser)->location;
3813   cond = c_objc_common_truthvalue_conversion
3814     (c_parser_expression_conv (parser).value);
3815   if (CAN_HAVE_LOCATION_P (cond))
3816     SET_EXPR_LOCATION (cond, loc);
3817   c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
3818   return cond;
3819 }
3820
3821 /* Parse a statement which is a block in C99.  */
3822
3823 static tree
3824 c_parser_c99_block_statement (c_parser *parser)
3825 {
3826   tree block = c_begin_compound_stmt (flag_isoc99);
3827   c_parser_statement (parser);
3828   return c_end_compound_stmt (block, flag_isoc99);
3829 }
3830
3831 /* Parse the body of an if statement or the else half thereof.  This
3832    is just parsing a statement but (a) it is a block in C99, (b) we
3833    track whether the body is an if statement for the sake of
3834    -Wparentheses warnings, (c) we handle an empty body specially for
3835    the sake of -Wempty-body warnings.  */
3836
3837 static tree
3838 c_parser_if_body (c_parser *parser, bool *if_p)
3839 {
3840   tree block = c_begin_compound_stmt (flag_isoc99);
3841   while (c_parser_next_token_is_keyword (parser, RID_CASE)
3842          || c_parser_next_token_is_keyword (parser, RID_DEFAULT)
3843          || (c_parser_next_token_is (parser, CPP_NAME)
3844              && c_parser_peek_2nd_token (parser)->type == CPP_COLON))
3845     c_parser_label (parser);
3846   *if_p = c_parser_next_token_is_keyword (parser, RID_IF);
3847   if (c_parser_next_token_is (parser, CPP_SEMICOLON))
3848     add_stmt (build_empty_stmt ());
3849   c_parser_statement_after_labels (parser);
3850   return c_end_compound_stmt (block, flag_isoc99);
3851 }
3852
3853 /* Parse an if statement (C90 6.6.4, C99 6.8.4).
3854
3855    if-statement:
3856      if ( expression ) statement
3857      if ( expression ) statement else statement
3858 */
3859
3860 static void
3861 c_parser_if_statement (c_parser *parser)
3862 {
3863   tree block;
3864   location_t loc;
3865   tree cond;
3866   bool first_if = false, second_if = false;
3867   tree first_body, second_body;
3868   gcc_assert (c_parser_next_token_is_keyword (parser, RID_IF));
3869   c_parser_consume_token (parser);
3870   block = c_begin_compound_stmt (flag_isoc99);
3871   loc = c_parser_peek_token (parser)->location;
3872   cond = c_parser_paren_condition (parser);
3873   first_body = c_parser_if_body (parser, &first_if);
3874   if (c_parser_next_token_is_keyword (parser, RID_ELSE))
3875     {
3876       c_parser_consume_token (parser);
3877       second_body = c_parser_if_body (parser, &second_if);
3878     }
3879   else
3880     second_body = NULL_TREE;
3881   c_finish_if_stmt (loc, cond, first_body, second_body, first_if);
3882   add_stmt (c_end_compound_stmt (block, flag_isoc99));
3883 }
3884
3885 /* Parse a switch statement (C90 6.6.4, C99 6.8.4).
3886
3887    switch-statement:
3888      switch (expression) statement
3889 */
3890
3891 static void
3892 c_parser_switch_statement (c_parser *parser)
3893 {
3894   tree block, expr, body, save_break;
3895   gcc_assert (c_parser_next_token_is_keyword (parser, RID_SWITCH));
3896   c_parser_consume_token (parser);
3897   block = c_begin_compound_stmt (flag_isoc99);
3898   if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
3899     {
3900       expr = c_parser_expression (parser).value;
3901       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
3902     }
3903   else
3904     expr = error_mark_node;
3905   c_start_case (expr);
3906   save_break = c_break_label;
3907   c_break_label = NULL_TREE;
3908   body = c_parser_c99_block_statement (parser);
3909   c_finish_case (body);
3910   if (c_break_label)
3911     add_stmt (build1 (LABEL_EXPR, void_type_node, c_break_label));
3912   c_break_label = save_break;
3913   add_stmt (c_end_compound_stmt (block, flag_isoc99));
3914 }
3915
3916 /* Parse a while statement (C90 6.6.5, C99 6.8.5).
3917
3918    while-statement:
3919       while (expression) statement
3920 */
3921
3922 static void
3923 c_parser_while_statement (c_parser *parser)
3924 {
3925   tree block, cond, body, save_break, save_cont;
3926   location_t loc;
3927   gcc_assert (c_parser_next_token_is_keyword (parser, RID_WHILE));
3928   c_parser_consume_token (parser);
3929   block = c_begin_compound_stmt (flag_isoc99);
3930   loc = c_parser_peek_token (parser)->location;
3931   cond = c_parser_paren_condition (parser);
3932   save_break = c_break_label;
3933   c_break_label = NULL_TREE;
3934   save_cont = c_cont_label;
3935   c_cont_label = NULL_TREE;
3936   body = c_parser_c99_block_statement (parser);
3937   c_finish_loop (loc, cond, NULL, body, c_break_label, c_cont_label, true);
3938   add_stmt (c_end_compound_stmt (block, flag_isoc99));
3939   c_break_label = save_break;
3940   c_cont_label = save_cont;
3941 }
3942
3943 /* Parse a do statement (C90 6.6.5, C99 6.8.5).
3944
3945    do-statement:
3946      do statement while ( expression ) ;
3947 */
3948
3949 static void
3950 c_parser_do_statement (c_parser *parser)
3951 {
3952   tree block, cond, body, save_break, save_cont, new_break, new_cont;
3953   location_t loc;
3954   gcc_assert (c_parser_next_token_is_keyword (parser, RID_DO));
3955   c_parser_consume_token (parser);
3956   if (c_parser_next_token_is (parser, CPP_SEMICOLON))
3957     warning (OPT_Wempty_body,
3958              "suggest braces around empty body in %<do%> statement");
3959   block = c_begin_compound_stmt (flag_isoc99);
3960   loc = c_parser_peek_token (parser)->location;
3961   save_break = c_break_label;
3962   c_break_label = NULL_TREE;
3963   save_cont = c_cont_label;
3964   c_cont_label = NULL_TREE;
3965   body = c_parser_c99_block_statement (parser);
3966   c_parser_require_keyword (parser, RID_WHILE, "expected %<while%>");
3967   new_break = c_break_label;
3968   c_break_label = save_break;
3969   new_cont = c_cont_label;
3970   c_cont_label = save_cont;
3971   cond = c_parser_paren_condition (parser);
3972   if (!c_parser_require (parser, CPP_SEMICOLON, "expected %<;%>"))
3973     c_parser_skip_to_end_of_block_or_statement (parser);
3974   c_finish_loop (loc, cond, NULL, body, new_break, new_cont, false);
3975   add_stmt (c_end_compound_stmt (block, flag_isoc99));
3976 }
3977
3978 /* Parse a for statement (C90 6.6.5, C99 6.8.5).
3979
3980    for-statement:
3981      for ( expression[opt] ; expression[opt] ; expression[opt] ) statement
3982      for ( nested-declaration expression[opt] ; expression[opt] ) statement
3983
3984    The form with a declaration is new in C99.
3985
3986    ??? In accordance with the old parser, the declaration may be a
3987    nested function, which is then rejected in check_for_loop_decls,
3988    but does it make any sense for this to be included in the grammar?
3989    Note in particular that the nested function does not include a
3990    trailing ';', whereas the "declaration" production includes one.
3991    Also, can we reject bad declarations earlier and cheaper than
3992    check_for_loop_decls?  */
3993
3994 static void
3995 c_parser_for_statement (c_parser *parser)
3996 {
3997   tree block, cond, incr, save_break, save_cont, body;
3998   location_t loc;
3999   gcc_assert (c_parser_next_token_is_keyword (parser, RID_FOR));
4000   loc = c_parser_peek_token (parser)->location;
4001   c_parser_consume_token (parser);
4002   block = c_begin_compound_stmt (flag_isoc99);
4003   if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
4004     {
4005       /* Parse the initialization declaration or expression.  */
4006       if (c_parser_next_token_is (parser, CPP_SEMICOLON))
4007         {
4008           c_parser_consume_token (parser);
4009           c_finish_expr_stmt (NULL_TREE);
4010         }
4011       else if (c_parser_next_token_starts_declspecs (parser))
4012         {
4013           c_parser_declaration_or_fndef (parser, true, true, true, true);
4014           check_for_loop_decls ();
4015         }
4016       else if (c_parser_next_token_is_keyword (parser, RID_EXTENSION))
4017         {
4018           /* __extension__ can start a declaration, but is also an
4019              unary operator that can start an expression.  Consume all
4020              but the last of a possible series of __extension__ to
4021              determine which.  */
4022           while (c_parser_peek_2nd_token (parser)->type == CPP_KEYWORD
4023                  && (c_parser_peek_2nd_token (parser)->keyword
4024                      == RID_EXTENSION))
4025             c_parser_consume_token (parser);
4026           if (c_token_starts_declspecs (c_parser_peek_2nd_token (parser)))
4027             {
4028               int ext;
4029               ext = disable_extension_diagnostics ();
4030               c_parser_consume_token (parser);
4031               c_parser_declaration_or_fndef (parser, true, true, true, true);
4032               restore_extension_diagnostics (ext);
4033               check_for_loop_decls ();
4034             }
4035           else
4036             goto init_expr;
4037         }
4038       else
4039         {
4040         init_expr:
4041           c_finish_expr_stmt (c_parser_expression (parser).value);
4042           c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
4043         }
4044       /* Parse the loop condition.  */
4045       loc = c_parser_peek_token (parser)->location;
4046       if (c_parser_next_token_is (parser, CPP_SEMICOLON))
4047         {
4048           c_parser_consume_token (parser);
4049           cond = NULL_TREE;
4050         }
4051       else
4052         {
4053           tree ocond = c_parser_expression_conv (parser).value;
4054           cond = c_objc_common_truthvalue_conversion (ocond);
4055           if (CAN_HAVE_LOCATION_P (cond))
4056             SET_EXPR_LOCATION (cond, loc);
4057           c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
4058         }
4059       /* Parse the increment expression.  */
4060       if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
4061         incr = c_process_expr_stmt (NULL_TREE);
4062       else
4063         incr = c_process_expr_stmt (c_parser_expression (parser).value);
4064       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
4065     }
4066   else
4067     {
4068       cond = error_mark_node;
4069       incr = error_mark_node;
4070     }
4071   save_break = c_break_label;
4072   c_break_label = NULL_TREE;
4073   save_cont = c_cont_label;
4074   c_cont_label = NULL_TREE;
4075   body = c_parser_c99_block_statement (parser);
4076   c_finish_loop (loc, cond, incr, body, c_break_label, c_cont_label, true);
4077   add_stmt (c_end_compound_stmt (block, flag_isoc99));
4078   c_break_label = save_break;
4079   c_cont_label = save_cont;
4080 }
4081
4082 /* Parse an asm statement, a GNU extension.  This is a full-blown asm
4083    statement with inputs, outputs, clobbers, and volatile tag
4084    allowed.
4085
4086    asm-statement:
4087      asm type-qualifier[opt] ( asm-argument ) ;
4088
4089    asm-argument:
4090      asm-string-literal
4091      asm-string-literal : asm-operands[opt]
4092      asm-string-literal : asm-operands[opt] : asm-operands[opt]
4093      asm-string-literal : asm-operands[opt] : asm-operands[opt] : asm-clobbers
4094
4095    Qualifiers other than volatile are accepted in the syntax but
4096    warned for.  */
4097
4098 static tree
4099 c_parser_asm_statement (c_parser *parser)
4100 {
4101   tree quals, str, outputs, inputs, clobbers, ret;
4102   bool simple;
4103   gcc_assert (c_parser_next_token_is_keyword (parser, RID_ASM));
4104   c_parser_consume_token (parser);
4105   if (c_parser_next_token_is_keyword (parser, RID_VOLATILE))
4106     {
4107       quals = c_parser_peek_token (parser)->value;
4108       c_parser_consume_token (parser);
4109     }
4110   else if (c_parser_next_token_is_keyword (parser, RID_CONST)
4111            || c_parser_next_token_is_keyword (parser, RID_RESTRICT))
4112     {
4113       warning (0, "%E qualifier ignored on asm",
4114                c_parser_peek_token (parser)->value);
4115       quals = NULL_TREE;
4116       c_parser_consume_token (parser);
4117     }
4118   else
4119     quals = NULL_TREE;
4120   /* ??? Follow the C++ parser rather than using the
4121      c_lex_string_translate kludge.  */
4122   c_lex_string_translate = 0;
4123   if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
4124     {
4125       c_lex_string_translate = 1;
4126       return NULL_TREE;
4127     }
4128   str = c_parser_asm_string_literal (parser);
4129   if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
4130     {
4131       simple = true;
4132       outputs = NULL_TREE;
4133       inputs = NULL_TREE;
4134       clobbers = NULL_TREE;
4135       goto done_asm;
4136     }
4137   if (!c_parser_require (parser, CPP_COLON, "expected %<:%> or %<)%>"))
4138     {
4139       c_lex_string_translate = 1;
4140       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
4141       return NULL_TREE;
4142     }
4143   simple = false;
4144   /* Parse outputs.  */
4145   if (c_parser_next_token_is (parser, CPP_COLON)
4146       || c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
4147     outputs = NULL_TREE;
4148   else
4149     outputs = c_parser_asm_operands (parser, false);
4150   if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
4151     {
4152       inputs = NULL_TREE;
4153       clobbers = NULL_TREE;
4154       goto done_asm;
4155     }
4156   if (!c_parser_require (parser, CPP_COLON, "expected %<:%> or %<)%>"))
4157     {
4158       c_lex_string_translate = 1;
4159       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
4160       return NULL_TREE;
4161     }
4162   /* Parse inputs.  */
4163   if (c_parser_next_token_is (parser, CPP_COLON)
4164       || c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
4165     inputs = NULL_TREE;
4166   else
4167     inputs = c_parser_asm_operands (parser, true);
4168   if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
4169     {
4170       clobbers = NULL_TREE;
4171       goto done_asm;
4172     }
4173   if (!c_parser_require (parser, CPP_COLON, "expected %<:%> or %<)%>"))
4174     {
4175       c_lex_string_translate = 1;
4176       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
4177       return NULL_TREE;
4178     }
4179   /* Parse clobbers.  */
4180   clobbers = c_parser_asm_clobbers (parser);
4181  done_asm:
4182   c_lex_string_translate = 1;
4183   if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
4184     {
4185       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
4186       return NULL_TREE;
4187     }
4188   if (!c_parser_require (parser, CPP_SEMICOLON, "expected %<;%>"))
4189     c_parser_skip_to_end_of_block_or_statement (parser);
4190   ret = build_asm_stmt (quals, build_asm_expr (str, outputs, inputs,
4191                                                clobbers, simple));
4192   return ret;
4193 }
4194
4195 /* Parse asm operands, a GNU extension.  If CONVERT_P (for inputs but
4196    not outputs), apply the default conversion of functions and arrays
4197    to pointers.
4198
4199    asm-operands:
4200      asm-operand
4201      asm-operands , asm-operand
4202
4203    asm-operand:
4204      asm-string-literal ( expression )
4205      [ identifier ] asm-string-literal ( expression )
4206 */
4207
4208 static tree
4209 c_parser_asm_operands (c_parser *parser, bool convert_p)
4210 {
4211   tree list = NULL_TREE;
4212   while (true)
4213     {
4214       tree name, str;
4215       struct c_expr expr;
4216       if (c_parser_next_token_is (parser, CPP_OPEN_SQUARE))
4217         {
4218           c_parser_consume_token (parser);
4219           if (c_parser_next_token_is (parser, CPP_NAME))
4220             {
4221               tree id = c_parser_peek_token (parser)->value;
4222               c_parser_consume_token (parser);
4223               name = build_string (IDENTIFIER_LENGTH (id),
4224                                    IDENTIFIER_POINTER (id));
4225             }
4226           else
4227             {
4228               c_parser_error (parser, "expected identifier");
4229               c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE, NULL);
4230               return NULL_TREE;
4231             }
4232           c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE,
4233                                      "expected %<]%>");
4234         }
4235       else
4236         name = NULL_TREE;
4237       str = c_parser_asm_string_literal (parser);
4238       if (str == NULL_TREE)
4239         return NULL_TREE;
4240       c_lex_string_translate = 1;
4241       if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
4242         {
4243           c_lex_string_translate = 0;
4244           return NULL_TREE;
4245         }
4246       expr = c_parser_expression (parser);
4247       if (convert_p)
4248         expr = default_function_array_conversion (expr);
4249       c_lex_string_translate = 0;
4250       if (!c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>"))
4251         {
4252           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
4253           return NULL_TREE;
4254         }
4255       list = chainon (list, build_tree_list (build_tree_list (name, str),
4256                                              expr.value));
4257       if (c_parser_next_token_is (parser, CPP_COMMA))
4258         c_parser_consume_token (parser);
4259       else
4260         break;
4261     }
4262   return list;
4263 }
4264
4265 /* Parse asm clobbers, a GNU extension.
4266
4267    asm-clobbers:
4268      asm-string-literal
4269      asm-clobbers , asm-string-literal
4270 */
4271
4272 static tree
4273 c_parser_asm_clobbers (c_parser *parser)
4274 {
4275   tree list = NULL_TREE;
4276   while (true)
4277     {
4278       tree str = c_parser_asm_string_literal (parser);
4279       if (str)
4280         list = tree_cons (NULL_TREE, str, list);
4281       else
4282         return NULL_TREE;
4283       if (c_parser_next_token_is (parser, CPP_COMMA))
4284         c_parser_consume_token (parser);
4285       else
4286         break;
4287     }
4288   return list;
4289 }
4290
4291 /* Parse an expression other than a compound expression; that is, an
4292    assignment expression (C90 6.3.16, C99 6.5.16).  If AFTER is not
4293    NULL then it is an Objective-C message expression which is the
4294    primary-expression starting the expression as an initializer.
4295
4296    assignment-expression:
4297      conditional-expression
4298      unary-expression assignment-operator assignment-expression
4299
4300    assignment-operator: one of
4301      = *= /= %= += -= <<= >>= &= ^= |=
4302
4303    In GNU C we accept any conditional expression on the LHS and
4304    diagnose the invalid lvalue rather than producing a syntax
4305    error.  */
4306
4307 static struct c_expr
4308 c_parser_expr_no_commas (c_parser *parser, struct c_expr *after)
4309 {
4310   struct c_expr lhs, rhs, ret;
4311   enum tree_code code;
4312   gcc_assert (!after || c_dialect_objc ());
4313   lhs = c_parser_conditional_expression (parser, after);
4314   switch (c_parser_peek_token (parser)->type)
4315     {
4316     case CPP_EQ:
4317       code = NOP_EXPR;
4318       break;
4319     case CPP_MULT_EQ:
4320       code = MULT_EXPR;
4321       break;
4322     case CPP_DIV_EQ:
4323       code = TRUNC_DIV_EXPR;
4324       break;
4325     case CPP_MOD_EQ:
4326       code = TRUNC_MOD_EXPR;
4327       break;
4328     case CPP_PLUS_EQ:
4329       code = PLUS_EXPR;
4330       break;
4331     case CPP_MINUS_EQ:
4332       code = MINUS_EXPR;
4333       break;
4334     case CPP_LSHIFT_EQ:
4335       code = LSHIFT_EXPR;
4336       break;
4337     case CPP_RSHIFT_EQ:
4338       code = RSHIFT_EXPR;
4339       break;
4340     case CPP_AND_EQ:
4341       code = BIT_AND_EXPR;
4342       break;
4343     case CPP_XOR_EQ:
4344       code = BIT_XOR_EXPR;
4345       break;
4346     case CPP_OR_EQ:
4347       code = BIT_IOR_EXPR;
4348       break;
4349     default:
4350       return lhs;
4351     }
4352   c_parser_consume_token (parser);
4353   rhs = c_parser_expr_no_commas (parser, NULL);
4354   rhs = default_function_array_conversion (rhs);
4355   ret.value = build_modify_expr (lhs.value, code, rhs.value);
4356   if (code == NOP_EXPR)
4357     ret.original_code = MODIFY_EXPR;
4358   else
4359     {
4360       TREE_NO_WARNING (ret.value) = 1;
4361       ret.original_code = ERROR_MARK;
4362     }
4363   return ret;
4364 }
4365
4366 /* Parse a conditional expression (C90 6.3.15, C99 6.5.15).  If AFTER
4367    is not NULL then it is an Objective-C message expression which is
4368    the primary-expression starting the expression as an initializer.
4369
4370    conditional-expression:
4371      logical-OR-expression
4372      logical-OR-expression ? expression : conditional-expression
4373
4374    GNU extensions:
4375
4376    conditional-expression:
4377      logical-OR-expression ? : conditional-expression
4378 */
4379
4380 static struct c_expr
4381 c_parser_conditional_expression (c_parser *parser, struct c_expr *after)
4382 {
4383   struct c_expr cond, exp1, exp2, ret;
4384   gcc_assert (!after || c_dialect_objc ());
4385   cond = c_parser_binary_expression (parser, after);
4386   if (c_parser_next_token_is_not (parser, CPP_QUERY))
4387     return cond;
4388   cond = default_function_array_conversion (cond);
4389   c_parser_consume_token (parser);
4390   if (c_parser_next_token_is (parser, CPP_COLON))
4391     {
4392       if (pedantic)
4393         pedwarn ("ISO C forbids omitting the middle term of a ?: expression");
4394       /* Make sure first operand is calculated only once.  */
4395       exp1.value = save_expr (default_conversion (cond.value));
4396       cond.value = c_objc_common_truthvalue_conversion (exp1.value);
4397       skip_evaluation += cond.value == truthvalue_true_node;
4398     }
4399   else
4400     {
4401       cond.value
4402         = c_objc_common_truthvalue_conversion
4403         (default_conversion (cond.value));
4404       skip_evaluation += cond.value == truthvalue_false_node;
4405       exp1 = c_parser_expression_conv (parser);
4406       skip_evaluation += ((cond.value == truthvalue_true_node)
4407                           - (cond.value == truthvalue_false_node));
4408     }
4409   if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
4410     {
4411       skip_evaluation -= cond.value == truthvalue_true_node;
4412       ret.value = error_mark_node;
4413       ret.original_code = ERROR_MARK;
4414       return ret;
4415     }
4416   exp2 = c_parser_conditional_expression (parser, NULL);
4417   exp2 = default_function_array_conversion (exp2);
4418   skip_evaluation -= cond.value == truthvalue_true_node;
4419   ret.value = build_conditional_expr (cond.value, exp1.value, exp2.value);
4420   ret.original_code = ERROR_MARK;
4421   return ret;
4422 }
4423
4424 /* Parse a binary expression; that is, a logical-OR-expression (C90
4425    6.3.5-6.3.14, C99 6.5.5-6.5.14).  If AFTER is not NULL then it is
4426    an Objective-C message expression which is the primary-expression
4427    starting the expression as an initializer.
4428
4429    multiplicative-expression:
4430      cast-expression
4431      multiplicative-expression * cast-expression
4432      multiplicative-expression / cast-expression
4433      multiplicative-expression % cast-expression
4434
4435    additive-expression:
4436      multiplicative-expression
4437      additive-expression + multiplicative-expression
4438      additive-expression - multiplicative-expression
4439
4440    shift-expression:
4441      additive-expression
4442      shift-expression << additive-expression
4443      shift-expression >> additive-expression
4444
4445    relational-expression:
4446      shift-expression
4447      relational-expression < shift-expression
4448      relational-expression > shift-expression
4449      relational-expression <= shift-expression
4450      relational-expression >= shift-expression
4451
4452    equality-expression:
4453      relational-expression
4454      equality-expression == relational-expression
4455      equality-expression != relational-expression
4456
4457    AND-expression:
4458      equality-expression
4459      AND-expression & equality-expression
4460
4461    exclusive-OR-expression:
4462      AND-expression
4463      exclusive-OR-expression ^ AND-expression
4464
4465    inclusive-OR-expression:
4466      exclusive-OR-expression
4467      inclusive-OR-expression | exclusive-OR-expression
4468
4469    logical-AND-expression:
4470      inclusive-OR-expression
4471      logical-AND-expression && inclusive-OR-expression
4472
4473    logical-OR-expression:
4474      logical-AND-expression
4475      logical-OR-expression || logical-AND-expression
4476 */
4477
4478 static struct c_expr
4479 c_parser_binary_expression (c_parser *parser, struct c_expr *after)
4480 {
4481   /* A binary expression is parsed using operator-precedence parsing,
4482      with the operands being cast expressions.  All the binary
4483      operators are left-associative.  Thus a binary expression is of
4484      form:
4485
4486      E0 op1 E1 op2 E2 ...
4487
4488      which we represent on a stack.  On the stack, the precedence
4489      levels are strictly increasing.  When a new operator is
4490      encountered of higher precedence than that at the top of the
4491      stack, it is pushed; its LHS is the top expression, and its RHS
4492      is everything parsed until it is popped.  When a new operator is
4493      encountered with precedence less than or equal to that at the top
4494      of the stack, triples E[i-1] op[i] E[i] are popped and replaced
4495      by the result of the operation until the operator at the top of
4496      the stack has lower precedence than the new operator or there is
4497      only one element on the stack; then the top expression is the LHS
4498      of the new operator.  In the case of logical AND and OR
4499      expressions, we also need to adjust skip_evaluation as
4500      appropriate when the operators are pushed and popped.  */
4501
4502   /* The precedence levels, where 0 is a dummy lowest level used for
4503      the bottom of the stack.  */
4504   enum prec {
4505     PREC_NONE,
4506     PREC_LOGOR,
4507     PREC_LOGAND,
4508     PREC_BITOR,
4509     PREC_BITXOR,
4510     PREC_BITAND,
4511     PREC_EQ,
4512     PREC_REL,
4513     PREC_SHIFT,
4514     PREC_ADD,
4515     PREC_MULT,
4516     NUM_PRECS
4517   };
4518   struct {
4519     /* The expression at this stack level.  */
4520     struct c_expr expr;
4521     /* The precedence of the operator on its left, PREC_NONE at the
4522        bottom of the stack.  */
4523     enum prec prec;
4524     /* The operation on its left.  */
4525     enum tree_code op;
4526   } stack[NUM_PRECS];
4527   int sp;
4528 #define POP                                                                   \
4529   do {                                                                        \
4530     switch (stack[sp].op)                                                     \
4531       {                                                                       \
4532       case TRUTH_ANDIF_EXPR:                                                  \
4533         skip_evaluation -= stack[sp - 1].expr.value == truthvalue_false_node; \
4534         break;                                                                \
4535       case TRUTH_ORIF_EXPR:                                                   \
4536         skip_evaluation -= stack[sp - 1].expr.value == truthvalue_true_node;  \
4537         break;                                                                \
4538       default:                                                                \
4539         break;                                                                \
4540       }                                                                       \
4541     stack[sp - 1].expr                                                        \
4542       = default_function_array_conversion (stack[sp - 1].expr);               \
4543     stack[sp].expr                                                            \
4544       = default_function_array_conversion (stack[sp].expr);                   \
4545     stack[sp - 1].expr = parser_build_binary_op (stack[sp].op,                \
4546                                                  stack[sp - 1].expr,          \
4547                                                  stack[sp].expr);             \
4548     sp--;                                                                     \
4549   } while (0)
4550   gcc_assert (!after || c_dialect_objc ());
4551   stack[0].expr = c_parser_cast_expression (parser, after);
4552   stack[0].prec = PREC_NONE;
4553   sp = 0;
4554   while (true)
4555     {
4556       enum prec oprec;
4557       enum tree_code ocode;
4558       if (parser->error)
4559         goto out;
4560       switch (c_parser_peek_token (parser)->type)
4561         {
4562         case CPP_MULT:
4563           oprec = PREC_MULT;
4564           ocode = MULT_EXPR;
4565           break;
4566         case CPP_DIV:
4567           oprec = PREC_MULT;
4568           ocode = TRUNC_DIV_EXPR;
4569           break;
4570         case CPP_MOD:
4571           oprec = PREC_MULT;
4572           ocode = TRUNC_MOD_EXPR;
4573           break;
4574         case CPP_PLUS:
4575           oprec = PREC_ADD;
4576           ocode = PLUS_EXPR;
4577           break;
4578         case CPP_MINUS:
4579           oprec = PREC_ADD;
4580           ocode = MINUS_EXPR;
4581           break;
4582         case CPP_LSHIFT:
4583           oprec = PREC_SHIFT;
4584           ocode = LSHIFT_EXPR;
4585           break;
4586         case CPP_RSHIFT:
4587           oprec = PREC_SHIFT;
4588           ocode = RSHIFT_EXPR;
4589           break;
4590         case CPP_LESS:
4591           oprec = PREC_REL;
4592           ocode = LT_EXPR;
4593           break;
4594         case CPP_GREATER:
4595           oprec = PREC_REL;
4596           ocode = GT_EXPR;
4597           break;
4598         case CPP_LESS_EQ:
4599           oprec = PREC_REL;
4600           ocode = LE_EXPR;
4601           break;
4602         case CPP_GREATER_EQ:
4603           oprec = PREC_REL;
4604           ocode = GE_EXPR;
4605           break;
4606         case CPP_EQ_EQ:
4607           oprec = PREC_EQ;
4608           ocode = EQ_EXPR;
4609           break;
4610         case CPP_NOT_EQ:
4611           oprec = PREC_EQ;
4612           ocode = NE_EXPR;
4613           break;
4614         case CPP_AND:
4615           oprec = PREC_BITAND;
4616           ocode = BIT_AND_EXPR;
4617           break;
4618         case CPP_XOR:
4619           oprec = PREC_BITXOR;
4620           ocode = BIT_XOR_EXPR;
4621           break;
4622         case CPP_OR:
4623           oprec = PREC_BITOR;
4624           ocode = BIT_IOR_EXPR;
4625           break;
4626         case CPP_AND_AND:
4627           oprec = PREC_LOGAND;
4628           ocode = TRUTH_ANDIF_EXPR;
4629           break;
4630         case CPP_OR_OR:
4631           oprec = PREC_LOGOR;
4632           ocode = TRUTH_ORIF_EXPR;
4633           break;
4634         default:
4635           /* Not a binary operator, so end of the binary
4636              expression.  */
4637           goto out;
4638         }
4639       c_parser_consume_token (parser);
4640       while (oprec <= stack[sp].prec)
4641         POP;
4642       switch (ocode)
4643         {
4644         case TRUTH_ANDIF_EXPR:
4645           stack[sp].expr
4646             = default_function_array_conversion (stack[sp].expr);
4647           stack[sp].expr.value = c_objc_common_truthvalue_conversion
4648             (default_conversion (stack[sp].expr.value));
4649           skip_evaluation += stack[sp].expr.value == truthvalue_false_node;
4650           break;
4651         case TRUTH_ORIF_EXPR:
4652           stack[sp].expr
4653             = default_function_array_conversion (stack[sp].expr);
4654           stack[sp].expr.value = c_objc_common_truthvalue_conversion
4655             (default_conversion (stack[sp].expr.value));
4656           skip_evaluation += stack[sp].expr.value == truthvalue_true_node;
4657           break;
4658         default:
4659           break;
4660         }
4661       sp++;
4662       stack[sp].expr = c_parser_cast_expression (parser, NULL);
4663       stack[sp].prec = oprec;
4664       stack[sp].op = ocode;
4665     }
4666  out:
4667   while (sp > 0)
4668     POP;
4669   return stack[0].expr;
4670 #undef POP
4671 }
4672
4673 /* Parse a cast expression (C90 6.3.4, C99 6.5.4).  If AFTER is not
4674    NULL then it is an Objective-C message expression which is the
4675    primary-expression starting the expression as an initializer.
4676
4677    cast-expression:
4678      unary-expression
4679      ( type-name ) unary-expression
4680 */
4681
4682 static struct c_expr
4683 c_parser_cast_expression (c_parser *parser, struct c_expr *after)
4684 {
4685   gcc_assert (!after || c_dialect_objc ());
4686   if (after)
4687     return c_parser_postfix_expression_after_primary (parser, *after);
4688   /* If the expression begins with a parenthesized type name, it may
4689      be either a cast or a compound literal; we need to see whether
4690      the next character is '{' to tell the difference.  If not, it is
4691      an unary expression.  */
4692   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN)
4693       && c_token_starts_typename (c_parser_peek_2nd_token (parser)))
4694     {
4695       struct c_type_name *type_name;
4696       struct c_expr ret;
4697       struct c_expr expr;
4698       c_parser_consume_token (parser);
4699       type_name = c_parser_type_name (parser);
4700       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
4701       if (type_name == NULL)
4702         {
4703           ret.value = error_mark_node;
4704           ret.original_code = ERROR_MARK;
4705           return ret;
4706         }
4707
4708       /* Save casted types in the function's used types hash table.  */
4709       used_types_insert (type_name->specs->type);
4710
4711       if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
4712         return c_parser_postfix_expression_after_paren_type (parser,
4713                                                              type_name);
4714       expr = c_parser_cast_expression (parser, NULL);
4715       expr = default_function_array_conversion (expr);
4716       ret.value = c_cast_expr (type_name, expr.value);
4717       ret.original_code = ERROR_MARK;
4718       return ret;
4719     }
4720   else
4721     return c_parser_unary_expression (parser);
4722 }
4723
4724 /* Parse an unary expression (C90 6.3.3, C99 6.5.3).
4725
4726    unary-expression:
4727      postfix-expression
4728      ++ unary-expression
4729      -- unary-expression
4730      unary-operator cast-expression
4731      sizeof unary-expression
4732      sizeof ( type-name )
4733
4734    unary-operator: one of
4735      & * + - ~ !
4736
4737    GNU extensions:
4738
4739    unary-expression:
4740      __alignof__ unary-expression
4741      __alignof__ ( type-name )
4742      && identifier
4743
4744    unary-operator: one of
4745      __extension__ __real__ __imag__
4746
4747    In addition, the GNU syntax treats ++ and -- as unary operators, so
4748    they may be applied to cast expressions with errors for non-lvalues
4749    given later.  */
4750
4751 static struct c_expr
4752 c_parser_unary_expression (c_parser *parser)
4753 {
4754   int ext;
4755   struct c_expr ret, op;
4756   switch (c_parser_peek_token (parser)->type)
4757     {
4758     case CPP_PLUS_PLUS:
4759       c_parser_consume_token (parser);
4760       op = c_parser_cast_expression (parser, NULL);
4761       op = default_function_array_conversion (op);
4762       return parser_build_unary_op (PREINCREMENT_EXPR, op);
4763     case CPP_MINUS_MINUS:
4764       c_parser_consume_token (parser);
4765       op = c_parser_cast_expression (parser, NULL);
4766       op = default_function_array_conversion (op);
4767       return parser_build_unary_op (PREDECREMENT_EXPR, op);
4768     case CPP_AND:
4769       c_parser_consume_token (parser);
4770       return parser_build_unary_op (ADDR_EXPR,
4771                                     c_parser_cast_expression (parser, NULL));
4772     case CPP_MULT:
4773       c_parser_consume_token (parser);
4774       op = c_parser_cast_expression (parser, NULL);
4775       op = default_function_array_conversion (op);
4776       ret.value = build_indirect_ref (op.value, "unary *");
4777       ret.original_code = ERROR_MARK;
4778       return ret;
4779     case CPP_PLUS:
4780       c_parser_consume_token (parser);
4781       if (!c_dialect_objc () && !in_system_header)
4782         warning (OPT_Wtraditional,
4783                  "traditional C rejects the unary plus operator");
4784       op = c_parser_cast_expression (parser, NULL);
4785       op = default_function_array_conversion (op);
4786       return parser_build_unary_op (CONVERT_EXPR, op);
4787     case CPP_MINUS:
4788       c_parser_consume_token (parser);
4789       op = c_parser_cast_expression (parser, NULL);
4790       op = default_function_array_conversion (op);
4791       return parser_build_unary_op (NEGATE_EXPR, op);
4792     case CPP_COMPL:
4793       c_parser_consume_token (parser);
4794       op = c_parser_cast_expression (parser, NULL);
4795       op = default_function_array_conversion (op);
4796       return parser_build_unary_op (BIT_NOT_EXPR, op);
4797     case CPP_NOT:
4798       c_parser_consume_token (parser);
4799       op = c_parser_cast_expression (parser, NULL);
4800       op = default_function_array_conversion (op);
4801       return parser_build_unary_op (TRUTH_NOT_EXPR, op);
4802     case CPP_AND_AND:
4803       /* Refer to the address of a label as a pointer.  */
4804       c_parser_consume_token (parser);
4805       if (c_parser_next_token_is (parser, CPP_NAME))
4806         {
4807           ret.value = finish_label_address_expr
4808             (c_parser_peek_token (parser)->value);
4809           c_parser_consume_token (parser);
4810         }
4811       else
4812         {
4813           c_parser_error (parser, "expected identifier");
4814           ret.value = error_mark_node;
4815         }
4816         ret.original_code = ERROR_MARK;
4817         return ret;
4818     case CPP_KEYWORD:
4819       switch (c_parser_peek_token (parser)->keyword)
4820         {
4821         case RID_SIZEOF:
4822           return c_parser_sizeof_expression (parser);
4823         case RID_ALIGNOF:
4824           return c_parser_alignof_expression (parser);
4825         case RID_EXTENSION:
4826           c_parser_consume_token (parser);
4827           ext = disable_extension_diagnostics ();
4828           ret = c_parser_cast_expression (parser, NULL);
4829           restore_extension_diagnostics (ext);
4830           return ret;
4831         case RID_REALPART:
4832           c_parser_consume_token (parser);
4833           op = c_parser_cast_expression (parser, NULL);
4834           op = default_function_array_conversion (op);
4835           return parser_build_unary_op (REALPART_EXPR, op);
4836         case RID_IMAGPART:
4837           c_parser_consume_token (parser);
4838           op = c_parser_cast_expression (parser, NULL);
4839           op = default_function_array_conversion (op);
4840           return parser_build_unary_op (IMAGPART_EXPR, op);
4841         default:
4842           return c_parser_postfix_expression (parser);
4843         }
4844     default:
4845       return c_parser_postfix_expression (parser);
4846     }
4847 }
4848
4849 /* Parse a sizeof expression.  */
4850
4851 static struct c_expr
4852 c_parser_sizeof_expression (c_parser *parser)
4853 {
4854   struct c_expr expr;
4855   gcc_assert (c_parser_next_token_is_keyword (parser, RID_SIZEOF));
4856   c_parser_consume_token (parser);
4857   skip_evaluation++;
4858   in_sizeof++;
4859   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN)
4860       && c_token_starts_typename (c_parser_peek_2nd_token (parser)))
4861     {
4862       /* Either sizeof ( type-name ) or sizeof unary-expression
4863          starting with a compound literal.  */
4864       struct c_type_name *type_name;
4865       c_parser_consume_token (parser);
4866       type_name = c_parser_type_name (parser);
4867       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
4868       if (type_name == NULL)
4869         {
4870           struct c_expr ret;
4871           skip_evaluation--;
4872           in_sizeof--;
4873           ret.value = error_mark_node;
4874           ret.original_code = ERROR_MARK;
4875           return ret;
4876         }
4877       if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
4878         {
4879           expr = c_parser_postfix_expression_after_paren_type (parser,
4880                                                                type_name);
4881           goto sizeof_expr;
4882         }
4883       /* sizeof ( type-name ).  */
4884       skip_evaluation--;
4885       in_sizeof--;
4886       if (type_name->declarator->kind == cdk_array
4887           && type_name->declarator->u.array.vla_unspec_p)
4888         {
4889           /* C99 6.7.5.2p4 */
4890           error ("%<[*]%> not allowed in other than a declaration");
4891         }
4892       return c_expr_sizeof_type (type_name);
4893     }
4894   else
4895     {
4896       expr = c_parser_unary_expression (parser);
4897     sizeof_expr:
4898       skip_evaluation--;
4899       in_sizeof--;
4900       if (TREE_CODE (expr.value) == COMPONENT_REF
4901           && DECL_C_BIT_FIELD (TREE_OPERAND (expr.value, 1)))
4902         error ("%<sizeof%> applied to a bit-field");
4903       return c_expr_sizeof_expr (expr);
4904     }
4905 }
4906
4907 /* Parse an alignof expression.  */
4908
4909 static struct c_expr
4910 c_parser_alignof_expression (c_parser *parser)
4911 {
4912   struct c_expr expr;
4913   gcc_assert (c_parser_next_token_is_keyword (parser, RID_ALIGNOF));
4914   c_parser_consume_token (parser);
4915   skip_evaluation++;
4916   in_alignof++;
4917   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN)
4918       && c_token_starts_typename (c_parser_peek_2nd_token (parser)))
4919     {
4920       /* Either __alignof__ ( type-name ) or __alignof__
4921          unary-expression starting with a compound literal.  */
4922       struct c_type_name *type_name;
4923       struct c_expr ret;
4924       c_parser_consume_token (parser);
4925       type_name = c_parser_type_name (parser);
4926       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
4927       if (type_name == NULL)
4928         {
4929           struct c_expr ret;
4930           skip_evaluation--;
4931           in_alignof--;
4932           ret.value = error_mark_node;
4933           ret.original_code = ERROR_MARK;
4934           return ret;
4935         }
4936       if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
4937         {
4938           expr = c_parser_postfix_expression_after_paren_type (parser,
4939                                                                type_name);
4940           goto alignof_expr;
4941         }
4942       /* alignof ( type-name ).  */
4943       skip_evaluation--;
4944       in_alignof--;
4945       ret.value = c_alignof (groktypename (type_name));
4946       ret.original_code = ERROR_MARK;
4947       return ret;
4948     }
4949   else
4950     {
4951       struct c_expr ret;
4952       expr = c_parser_unary_expression (parser);
4953     alignof_expr:
4954       skip_evaluation--;
4955       in_alignof--;
4956       ret.value = c_alignof_expr (expr.value);
4957       ret.original_code = ERROR_MARK;
4958       return ret;
4959     }
4960 }
4961
4962 /* Parse a postfix expression (C90 6.3.1-6.3.2, C99 6.5.1-6.5.2).
4963
4964    postfix-expression:
4965      primary-expression
4966      postfix-expression [ expression ]
4967      postfix-expression ( argument-expression-list[opt] )
4968      postfix-expression . identifier
4969      postfix-expression -> identifier
4970      postfix-expression ++
4971      postfix-expression --
4972      ( type-name ) { initializer-list }
4973      ( type-name ) { initializer-list , }
4974
4975    argument-expression-list:
4976      argument-expression
4977      argument-expression-list , argument-expression
4978
4979    primary-expression:
4980      identifier
4981      constant
4982      string-literal
4983      ( expression )
4984
4985    GNU extensions:
4986
4987    primary-expression:
4988      __func__
4989        (treated as a keyword in GNU C)
4990      __FUNCTION__
4991      __PRETTY_FUNCTION__
4992      ( compound-statement )
4993      __builtin_va_arg ( assignment-expression , type-name )
4994      __builtin_offsetof ( type-name , offsetof-member-designator )
4995      __builtin_choose_expr ( assignment-expression ,
4996                              assignment-expression ,
4997                              assignment-expression )
4998      __builtin_types_compatible_p ( type-name , type-name )
4999
5000    offsetof-member-designator:
5001      identifier
5002      offsetof-member-designator . identifier
5003      offsetof-member-designator [ expression ]
5004
5005    Objective-C:
5006
5007    primary-expression:
5008      [ objc-receiver objc-message-args ]
5009      @selector ( objc-selector-arg )
5010      @protocol ( identifier )
5011      @encode ( type-name )
5012      objc-string-literal
5013 */
5014
5015 static struct c_expr
5016 c_parser_postfix_expression (c_parser *parser)
5017 {
5018   struct c_expr expr, e1, e2, e3;
5019   struct c_type_name *t1, *t2;
5020   switch (c_parser_peek_token (parser)->type)
5021     {
5022     case CPP_NUMBER:
5023     case CPP_CHAR:
5024     case CPP_WCHAR:
5025       expr.value = c_parser_peek_token (parser)->value;
5026       expr.original_code = ERROR_MARK;
5027       c_parser_consume_token (parser);
5028       break;
5029     case CPP_STRING:
5030     case CPP_WSTRING:
5031       expr.value = c_parser_peek_token (parser)->value;
5032       expr.original_code = STRING_CST;
5033       c_parser_consume_token (parser);
5034       break;
5035     case CPP_OBJC_STRING:
5036       gcc_assert (c_dialect_objc ());
5037       expr.value
5038         = objc_build_string_object (c_parser_peek_token (parser)->value);
5039       expr.original_code = ERROR_MARK;
5040       c_parser_consume_token (parser);
5041       break;
5042     case CPP_NAME:
5043       if (c_parser_peek_token (parser)->id_kind != C_ID_ID)
5044         {
5045           c_parser_error (parser, "expected expression");
5046           expr.value = error_mark_node;
5047           expr.original_code = ERROR_MARK;
5048           break;
5049         }
5050       {
5051         tree id = c_parser_peek_token (parser)->value;
5052         location_t loc = c_parser_peek_token (parser)->location;
5053         c_parser_consume_token (parser);
5054         expr.value = build_external_ref (id,
5055                                          (c_parser_peek_token (parser)->type
5056                                           == CPP_OPEN_PAREN), loc);
5057         expr.original_code = ERROR_MARK;
5058       }
5059       break;
5060     case CPP_OPEN_PAREN:
5061       /* A parenthesized expression, statement expression or compound
5062          literal.  */
5063       if (c_parser_peek_2nd_token (parser)->type == CPP_OPEN_BRACE)
5064         {
5065           /* A statement expression.  */
5066           tree stmt;
5067           c_parser_consume_token (parser);
5068           c_parser_consume_token (parser);
5069           if (cur_stmt_list == NULL)
5070             {
5071               error ("braced-group within expression allowed "
5072                      "only inside a function");
5073               parser->error = true;
5074               c_parser_skip_until_found (parser, CPP_CLOSE_BRACE, NULL);
5075               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5076               expr.value = error_mark_node;
5077               expr.original_code = ERROR_MARK;
5078               break;
5079             }
5080           stmt = c_begin_stmt_expr ();
5081           c_parser_compound_statement_nostart (parser);
5082           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5083                                      "expected %<)%>");
5084           if (pedantic)
5085             pedwarn ("ISO C forbids braced-groups within expressions");
5086           expr.value = c_finish_stmt_expr (stmt);
5087           expr.original_code = ERROR_MARK;
5088         }
5089       else if (c_token_starts_typename (c_parser_peek_2nd_token (parser)))
5090         {
5091           /* A compound literal.  ??? Can we actually get here rather
5092              than going directly to
5093              c_parser_postfix_expression_after_paren_type from
5094              elsewhere?  */
5095           struct c_type_name *type_name;
5096           c_parser_consume_token (parser);
5097           type_name = c_parser_type_name (parser);
5098           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5099                                      "expected %<)%>");
5100           if (type_name == NULL)
5101             {
5102               expr.value = error_mark_node;
5103               expr.original_code = ERROR_MARK;
5104             }
5105           else
5106             expr = c_parser_postfix_expression_after_paren_type (parser,
5107                                                                  type_name);
5108         }
5109       else
5110         {
5111           /* A parenthesized expression.  */
5112           c_parser_consume_token (parser);
5113           expr = c_parser_expression (parser);
5114           if (TREE_CODE (expr.value) == MODIFY_EXPR)
5115             TREE_NO_WARNING (expr.value) = 1;
5116           expr.original_code = ERROR_MARK;
5117           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5118                                      "expected %<)%>");
5119         }
5120       break;
5121     case CPP_KEYWORD:
5122       switch (c_parser_peek_token (parser)->keyword)
5123         {
5124         case RID_FUNCTION_NAME:
5125         case RID_PRETTY_FUNCTION_NAME:
5126         case RID_C99_FUNCTION_NAME:
5127           expr.value = fname_decl (c_parser_peek_token (parser)->keyword,
5128                                    c_parser_peek_token (parser)->value);
5129           expr.original_code = ERROR_MARK;
5130           c_parser_consume_token (parser);
5131           break;
5132         case RID_VA_ARG:
5133           c_parser_consume_token (parser);
5134           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
5135             {
5136               expr.value = error_mark_node;
5137               expr.original_code = ERROR_MARK;
5138               break;
5139             }
5140           e1 = c_parser_expr_no_commas (parser, NULL);
5141           if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
5142             {
5143               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5144               expr.value = error_mark_node;
5145               expr.original_code = ERROR_MARK;
5146               break;
5147             }
5148           t1 = c_parser_type_name (parser);
5149           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5150                                      "expected %<)%>");
5151           if (t1 == NULL)
5152             {
5153               expr.value = error_mark_node;
5154               expr.original_code = ERROR_MARK;
5155             }
5156           else
5157             {
5158               expr.value = build_va_arg (e1.value, groktypename (t1));
5159               expr.original_code = ERROR_MARK;
5160             }
5161           break;
5162         case RID_OFFSETOF:
5163           c_parser_consume_token (parser);
5164           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
5165             {
5166               expr.value = error_mark_node;
5167               expr.original_code = ERROR_MARK;
5168               break;
5169             }
5170           t1 = c_parser_type_name (parser);
5171           if (t1 == NULL)
5172             {
5173               expr.value = error_mark_node;
5174               expr.original_code = ERROR_MARK;
5175               break;
5176             }
5177           if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
5178             {
5179               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5180               expr.value = error_mark_node;
5181               expr.original_code = ERROR_MARK;
5182               break;
5183             }
5184           {
5185             tree type = groktypename (t1);
5186             tree offsetof_ref;
5187             if (type == error_mark_node)
5188               offsetof_ref = error_mark_node;
5189             else
5190               offsetof_ref = build1 (INDIRECT_REF, type, null_pointer_node);
5191             /* Parse the second argument to __builtin_offsetof.  We
5192                must have one identifier, and beyond that we want to
5193                accept sub structure and sub array references.  */
5194             if (c_parser_next_token_is (parser, CPP_NAME))
5195               {
5196                 offsetof_ref = build_component_ref
5197                   (offsetof_ref, c_parser_peek_token (parser)->value);
5198                 c_parser_consume_token (parser);
5199                 while (c_parser_next_token_is (parser, CPP_DOT)
5200                        || c_parser_next_token_is (parser,
5201                                                   CPP_OPEN_SQUARE))
5202                   {
5203                     if (c_parser_next_token_is (parser, CPP_DOT))
5204                       {
5205                         c_parser_consume_token (parser);
5206                         if (c_parser_next_token_is_not (parser,
5207                                                         CPP_NAME))
5208                           {
5209                             c_parser_error (parser, "expected identifier");
5210                             break;
5211                           }
5212                         offsetof_ref = build_component_ref
5213                           (offsetof_ref,
5214                            c_parser_peek_token (parser)->value);
5215                         c_parser_consume_token (parser);
5216                       }
5217                     else
5218                       {
5219                         tree idx;
5220                         c_parser_consume_token (parser);
5221                         idx = c_parser_expression (parser).value;
5222                         c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE,
5223                                                    "expected %<]%>");
5224                         offsetof_ref = build_array_ref (offsetof_ref, idx);
5225                       }
5226                   }
5227               }
5228             else
5229               c_parser_error (parser, "expected identifier");
5230             c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5231                                        "expected %<)%>");
5232             expr.value = fold_offsetof (offsetof_ref, NULL_TREE);
5233             expr.original_code = ERROR_MARK;
5234           }
5235           break;
5236         case RID_CHOOSE_EXPR:
5237           c_parser_consume_token (parser);
5238           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
5239             {
5240               expr.value = error_mark_node;
5241               expr.original_code = ERROR_MARK;
5242               break;
5243             }
5244           e1 = c_parser_expr_no_commas (parser, NULL);
5245           if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
5246             {
5247               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5248               expr.value = error_mark_node;
5249               expr.original_code = ERROR_MARK;
5250               break;
5251             }
5252           e2 = c_parser_expr_no_commas (parser, NULL);
5253           if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
5254             {
5255               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5256               expr.value = error_mark_node;
5257               expr.original_code = ERROR_MARK;
5258               break;
5259             }
5260           e3 = c_parser_expr_no_commas (parser, NULL);
5261           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5262                                      "expected %<)%>");
5263           {
5264             tree c;
5265
5266             c = fold (e1.value);
5267             if (TREE_CODE (c) != INTEGER_CST)
5268               error ("first argument to %<__builtin_choose_expr%> not"
5269                      " a constant");
5270             expr = integer_zerop (c) ? e3 : e2;
5271           }
5272           break;
5273         case RID_TYPES_COMPATIBLE_P:
5274           c_parser_consume_token (parser);
5275           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
5276             {
5277               expr.value = error_mark_node;
5278               expr.original_code = ERROR_MARK;
5279               break;
5280             }
5281           t1 = c_parser_type_name (parser);
5282           if (t1 == NULL)
5283             {
5284               expr.value = error_mark_node;
5285               expr.original_code = ERROR_MARK;
5286               break;
5287             }
5288           if (!c_parser_require (parser, CPP_COMMA, "expected %<,%>"))
5289             {
5290               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5291               expr.value = error_mark_node;
5292               expr.original_code = ERROR_MARK;
5293               break;
5294             }
5295           t2 = c_parser_type_name (parser);
5296           if (t2 == NULL)
5297             {
5298               expr.value = error_mark_node;
5299               expr.original_code = ERROR_MARK;
5300               break;
5301             }
5302           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5303                                      "expected %<)%>");
5304           {
5305             tree e1, e2;
5306
5307             e1 = TYPE_MAIN_VARIANT (groktypename (t1));
5308             e2 = TYPE_MAIN_VARIANT (groktypename (t2));
5309
5310             expr.value = comptypes (e1, e2)
5311               ? build_int_cst (NULL_TREE, 1)
5312               : build_int_cst (NULL_TREE, 0);
5313             expr.original_code = ERROR_MARK;
5314           }
5315           break;
5316         case RID_AT_SELECTOR:
5317           gcc_assert (c_dialect_objc ());
5318           c_parser_consume_token (parser);
5319           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
5320             {
5321               expr.value = error_mark_node;
5322               expr.original_code = ERROR_MARK;
5323               break;
5324             }
5325           {
5326             tree sel = c_parser_objc_selector_arg (parser);
5327             c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5328                                        "expected %<)%>");
5329             expr.value = objc_build_selector_expr (sel);
5330             expr.original_code = ERROR_MARK;
5331           }
5332           break;
5333         case RID_AT_PROTOCOL:
5334           gcc_assert (c_dialect_objc ());
5335           c_parser_consume_token (parser);
5336           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
5337             {
5338               expr.value = error_mark_node;
5339               expr.original_code = ERROR_MARK;
5340               break;
5341             }
5342           if (c_parser_next_token_is_not (parser, CPP_NAME))
5343             {
5344               c_parser_error (parser, "expected identifier");
5345               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5346               expr.value = error_mark_node;
5347               expr.original_code = ERROR_MARK;
5348               break;
5349             }
5350           {
5351             tree id = c_parser_peek_token (parser)->value;
5352             c_parser_consume_token (parser);
5353             c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5354                                        "expected %<)%>");
5355             expr.value = objc_build_protocol_expr (id);
5356             expr.original_code = ERROR_MARK;
5357           }
5358           break;
5359         case RID_AT_ENCODE:
5360           /* Extension to support C-structures in the archiver.  */
5361           gcc_assert (c_dialect_objc ());
5362           c_parser_consume_token (parser);
5363           if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
5364             {
5365               expr.value = error_mark_node;
5366               expr.original_code = ERROR_MARK;
5367               break;
5368             }
5369           t1 = c_parser_type_name (parser);
5370           if (t1 == NULL)
5371             {
5372               expr.value = error_mark_node;
5373               expr.original_code = ERROR_MARK;
5374               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5375               break;
5376             }
5377           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5378                                      "expected %<)%>");
5379           {
5380             tree type = groktypename (t1);
5381             expr.value = objc_build_encode_expr (type);
5382             expr.original_code = ERROR_MARK;
5383           }
5384           break;
5385         default:
5386           c_parser_error (parser, "expected expression");
5387           expr.value = error_mark_node;
5388           expr.original_code = ERROR_MARK;
5389           break;
5390         }
5391       break;
5392     case CPP_OPEN_SQUARE:
5393       if (c_dialect_objc ())
5394         {
5395           tree receiver, args;
5396           c_parser_consume_token (parser);
5397           receiver = c_parser_objc_receiver (parser);
5398           args = c_parser_objc_message_args (parser);
5399           c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE,
5400                                      "expected %<]%>");
5401           expr.value = objc_build_message_expr (build_tree_list (receiver,
5402                                                                  args));
5403           expr.original_code = ERROR_MARK;
5404           break;
5405         }
5406       /* Else fall through to report error.  */
5407     default:
5408       c_parser_error (parser, "expected expression");
5409       expr.value = error_mark_node;
5410       expr.original_code = ERROR_MARK;
5411       break;
5412     }
5413   return c_parser_postfix_expression_after_primary (parser, expr);
5414 }
5415
5416 /* Parse a postfix expression after a parenthesized type name: the
5417    brace-enclosed initializer of a compound literal, possibly followed
5418    by some postfix operators.  This is separate because it is not
5419    possible to tell until after the type name whether a cast
5420    expression has a cast or a compound literal, or whether the operand
5421    of sizeof is a parenthesized type name or starts with a compound
5422    literal.  */
5423
5424 static struct c_expr
5425 c_parser_postfix_expression_after_paren_type (c_parser *parser,
5426                                               struct c_type_name *type_name)
5427 {
5428   tree type;
5429   struct c_expr init;
5430   struct c_expr expr;
5431   start_init (NULL_TREE, NULL, 0);
5432   type = groktypename (type_name);
5433   if (type != error_mark_node && C_TYPE_VARIABLE_SIZE (type))
5434     {
5435       error ("compound literal has variable size");
5436       type = error_mark_node;
5437     }
5438   init = c_parser_braced_init (parser, type, false);
5439   finish_init ();
5440   maybe_warn_string_init (type, init);
5441
5442   if (pedantic && !flag_isoc99)
5443     pedwarn ("ISO C90 forbids compound literals");
5444   expr.value = build_compound_literal (type, init.value);
5445   expr.original_code = ERROR_MARK;
5446   return c_parser_postfix_expression_after_primary (parser, expr);
5447 }
5448
5449 /* Parse a postfix expression after the initial primary or compound
5450    literal; that is, parse a series of postfix operators.  */
5451
5452 static struct c_expr
5453 c_parser_postfix_expression_after_primary (c_parser *parser,
5454                                            struct c_expr expr)
5455 {
5456   tree ident, idx, exprlist;
5457   while (true)
5458     {
5459       switch (c_parser_peek_token (parser)->type)
5460         {
5461         case CPP_OPEN_SQUARE:
5462           /* Array reference.  */
5463           c_parser_consume_token (parser);
5464           idx = c_parser_expression (parser).value;
5465           c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE,
5466                                      "expected %<]%>");
5467           expr.value = build_array_ref (expr.value, idx);
5468           expr.original_code = ERROR_MARK;
5469           break;
5470         case CPP_OPEN_PAREN:
5471           /* Function call.  */
5472           c_parser_consume_token (parser);
5473           if (c_parser_next_token_is (parser, CPP_CLOSE_PAREN))
5474             exprlist = NULL_TREE;
5475           else
5476             exprlist = c_parser_expr_list (parser, true);
5477           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
5478                                      "expected %<)%>");
5479           expr.value = build_function_call (expr.value, exprlist);
5480           expr.original_code = ERROR_MARK;
5481           break;
5482         case CPP_DOT:
5483           /* Structure element reference.  */
5484           c_parser_consume_token (parser);
5485           expr = default_function_array_conversion (expr);
5486           if (c_parser_next_token_is (parser, CPP_NAME))
5487             ident = c_parser_peek_token (parser)->value;
5488           else
5489             {
5490               c_parser_error (parser, "expected identifier");
5491               expr.value = error_mark_node;
5492               expr.original_code = ERROR_MARK;
5493               return expr;
5494             }
5495           c_parser_consume_token (parser);
5496           expr.value = build_component_ref (expr.value, ident);
5497           expr.original_code = ERROR_MARK;
5498           break;
5499         case CPP_DEREF:
5500           /* Structure element reference.  */
5501           c_parser_consume_token (parser);
5502           expr = default_function_array_conversion (expr);
5503           if (c_parser_next_token_is (parser, CPP_NAME))
5504             ident = c_parser_peek_token (parser)->value;
5505           else
5506             {
5507               c_parser_error (parser, "expected identifier");
5508               expr.value = error_mark_node;
5509               expr.original_code = ERROR_MARK;
5510               return expr;
5511             }
5512           c_parser_consume_token (parser);
5513           expr.value = build_component_ref (build_indirect_ref (expr.value,
5514                                                                 "->"), ident);
5515           expr.original_code = ERROR_MARK;
5516           break;
5517         case CPP_PLUS_PLUS:
5518           /* Postincrement.  */
5519           c_parser_consume_token (parser);
5520           expr = default_function_array_conversion (expr);
5521           expr.value = build_unary_op (POSTINCREMENT_EXPR, expr.value, 0);
5522           expr.original_code = ERROR_MARK;
5523           break;
5524         case CPP_MINUS_MINUS:
5525           /* Postdecrement.  */
5526           c_parser_consume_token (parser);
5527           expr = default_function_array_conversion (expr);
5528           expr.value = build_unary_op (POSTDECREMENT_EXPR, expr.value, 0);
5529           expr.original_code = ERROR_MARK;
5530           break;
5531         default:
5532           return expr;
5533         }
5534     }
5535 }
5536
5537 /* Parse an expression (C90 6.3.17, C99 6.5.17).
5538
5539    expression:
5540      assignment-expression
5541      expression , assignment-expression
5542 */
5543
5544 static struct c_expr
5545 c_parser_expression (c_parser *parser)
5546 {
5547   struct c_expr expr;
5548   expr = c_parser_expr_no_commas (parser, NULL);
5549   while (c_parser_next_token_is (parser, CPP_COMMA))
5550     {
5551       struct c_expr next;
5552       c_parser_consume_token (parser);
5553       next = c_parser_expr_no_commas (parser, NULL);
5554       next = default_function_array_conversion (next);
5555       expr.value = build_compound_expr (expr.value, next.value);
5556       expr.original_code = COMPOUND_EXPR;
5557     }
5558   return expr;
5559 }
5560
5561 /* Parse an expression and convert functions or arrays to
5562    pointers.  */
5563
5564 static struct c_expr
5565 c_parser_expression_conv (c_parser *parser)
5566 {
5567   struct c_expr expr;
5568   expr = c_parser_expression (parser);
5569   expr = default_function_array_conversion (expr);
5570   return expr;
5571 }
5572
5573 /* Parse a non-empty list of expressions.  If CONVERT_P, convert
5574    functions and arrays to pointers.
5575
5576    nonempty-expr-list:
5577      assignment-expression
5578      nonempty-expr-list , assignment-expression
5579 */
5580
5581 static tree
5582 c_parser_expr_list (c_parser *parser, bool convert_p)
5583 {
5584   struct c_expr expr;
5585   tree ret, cur;
5586   expr = c_parser_expr_no_commas (parser, NULL);
5587   if (convert_p)
5588     expr = default_function_array_conversion (expr);
5589   ret = cur = build_tree_list (NULL_TREE, expr.value);
5590   while (c_parser_next_token_is (parser, CPP_COMMA))
5591     {
5592       c_parser_consume_token (parser);
5593       expr = c_parser_expr_no_commas (parser, NULL);
5594       if (convert_p)
5595         expr = default_function_array_conversion (expr);
5596       cur = TREE_CHAIN (cur) = build_tree_list (NULL_TREE, expr.value);
5597     }
5598   return ret;
5599 }
5600
5601 \f
5602 /* Parse Objective-C-specific constructs.  */
5603
5604 /* Parse an objc-class-definition.
5605
5606    objc-class-definition:
5607      @interface identifier objc-superclass[opt] objc-protocol-refs[opt]
5608        objc-class-instance-variables[opt] objc-methodprotolist @end
5609      @implementation identifier objc-superclass[opt]
5610        objc-class-instance-variables[opt]
5611      @interface identifier ( identifier ) objc-protocol-refs[opt]
5612        objc-methodprotolist @end
5613      @implementation identifier ( identifier )
5614
5615    objc-superclass:
5616      : identifier
5617
5618    "@interface identifier (" must start "@interface identifier (
5619    identifier ) ...": objc-methodprotolist in the first production may
5620    not start with a parenthesized identifier as a declarator of a data
5621    definition with no declaration specifiers if the objc-superclass,
5622    objc-protocol-refs and objc-class-instance-variables are omitted.  */
5623
5624 static void
5625 c_parser_objc_class_definition (c_parser *parser)
5626 {
5627   bool iface_p;
5628   tree id1;
5629   tree superclass;
5630   if (c_parser_next_token_is_keyword (parser, RID_AT_INTERFACE))
5631     iface_p = true;
5632   else if (c_parser_next_token_is_keyword (parser, RID_AT_IMPLEMENTATION))
5633     iface_p = false;
5634   else
5635     gcc_unreachable ();
5636   c_parser_consume_token (parser);
5637   if (c_parser_next_token_is_not (parser, CPP_NAME))
5638     {
5639       c_parser_error (parser, "expected identifier");
5640       return;
5641     }
5642   id1 = c_parser_peek_token (parser)->value;
5643   c_parser_consume_token (parser);
5644   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
5645     {
5646       tree id2;
5647       tree proto = NULL_TREE;
5648       c_parser_consume_token (parser);
5649       if (c_parser_next_token_is_not (parser, CPP_NAME))
5650         {
5651           c_parser_error (parser, "expected identifier");
5652           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
5653           return;
5654         }
5655       id2 = c_parser_peek_token (parser)->value;
5656       c_parser_consume_token (parser);
5657       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
5658       if (!iface_p)
5659         {
5660           objc_start_category_implementation (id1, id2);
5661           return;
5662         }
5663       if (c_parser_next_token_is (parser, CPP_LESS))
5664         proto = c_parser_objc_protocol_refs (parser);
5665       objc_start_category_interface (id1, id2, proto);
5666       c_parser_objc_methodprotolist (parser);
5667       c_parser_require_keyword (parser, RID_AT_END, "expected %<@end%>");
5668       objc_finish_interface ();
5669       return;
5670     }
5671   if (c_parser_next_token_is (parser, CPP_COLON))
5672     {
5673       c_parser_consume_token (parser);
5674       if (c_parser_next_token_is_not (parser, CPP_NAME))
5675         {
5676           c_parser_error (parser, "expected identifier");
5677           return;
5678         }
5679       superclass = c_parser_peek_token (parser)->value;
5680       c_parser_consume_token (parser);
5681     }
5682   else
5683     superclass = NULL_TREE;
5684   if (iface_p)
5685     {
5686       tree proto = NULL_TREE;
5687       if (c_parser_next_token_is (parser, CPP_LESS))
5688         proto = c_parser_objc_protocol_refs (parser);
5689       objc_start_class_interface (id1, superclass, proto);
5690     }
5691   else
5692     objc_start_class_implementation (id1, superclass);
5693   if (c_parser_next_token_is (parser, CPP_OPEN_BRACE))
5694     c_parser_objc_class_instance_variables (parser);
5695   if (iface_p)
5696     {
5697       objc_continue_interface ();
5698       c_parser_objc_methodprotolist (parser);
5699       c_parser_require_keyword (parser, RID_AT_END, "expected %<@end%>");
5700       objc_finish_interface ();
5701     }
5702   else
5703     {
5704       objc_continue_implementation ();
5705       return;
5706     }
5707 }
5708
5709 /* Parse objc-class-instance-variables.
5710
5711    objc-class-instance-variables:
5712      { objc-instance-variable-decl-list[opt] }
5713
5714    objc-instance-variable-decl-list:
5715      objc-visibility-spec
5716      objc-instance-variable-decl ;
5717      ;
5718      objc-instance-variable-decl-list objc-visibility-spec
5719      objc-instance-variable-decl-list objc-instance-variable-decl ;
5720      objc-instance-variable-decl-list ;
5721
5722    objc-visibility-spec:
5723      @private
5724      @protected
5725      @public
5726
5727    objc-instance-variable-decl:
5728      struct-declaration
5729 */
5730
5731 static void
5732 c_parser_objc_class_instance_variables (c_parser *parser)
5733 {
5734   gcc_assert (c_parser_next_token_is (parser, CPP_OPEN_BRACE));
5735   c_parser_consume_token (parser);
5736   while (c_parser_next_token_is_not (parser, CPP_EOF))
5737     {
5738       tree decls;
5739       /* Parse any stray semicolon.  */
5740       if (c_parser_next_token_is (parser, CPP_SEMICOLON))
5741         {
5742           if (pedantic)
5743             pedwarn ("extra semicolon in struct or union specified");
5744           c_parser_consume_token (parser);
5745           continue;
5746         }
5747       /* Stop if at the end of the instance variables.  */
5748       if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
5749         {
5750           c_parser_consume_token (parser);
5751           break;
5752         }
5753       /* Parse any objc-visibility-spec.  */
5754       if (c_parser_next_token_is_keyword (parser, RID_AT_PRIVATE))
5755         {
5756           c_parser_consume_token (parser);
5757           objc_set_visibility (2);
5758           continue;
5759         }
5760       else if (c_parser_next_token_is_keyword (parser, RID_AT_PROTECTED))
5761         {
5762           c_parser_consume_token (parser);
5763           objc_set_visibility (0);
5764           continue;
5765         }
5766       else if (c_parser_next_token_is_keyword (parser, RID_AT_PUBLIC))
5767         {
5768           c_parser_consume_token (parser);
5769           objc_set_visibility (1);
5770           continue;
5771         }
5772       else if (c_parser_next_token_is (parser, CPP_PRAGMA))
5773         {
5774           c_parser_pragma (parser, pragma_external);
5775           continue;
5776         }
5777
5778       /* Parse some comma-separated declarations.  */
5779       decls = c_parser_struct_declaration (parser);
5780       {
5781         /* Comma-separated instance variables are chained together in
5782            reverse order; add them one by one.  */
5783         tree ivar = nreverse (decls);
5784         for (; ivar; ivar = TREE_CHAIN (ivar))
5785           objc_add_instance_variable (copy_node (ivar));
5786       }
5787       c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
5788     }
5789 }
5790
5791 /* Parse an objc-class-declaration.
5792
5793    objc-class-declaration:
5794      @class identifier-list ;
5795 */
5796
5797 static void
5798 c_parser_objc_class_declaration (c_parser *parser)
5799 {
5800   tree list = NULL_TREE;
5801   gcc_assert (c_parser_next_token_is_keyword (parser, RID_AT_CLASS));
5802   c_parser_consume_token (parser);
5803   /* Any identifiers, including those declared as type names, are OK
5804      here.  */
5805   while (true)
5806     {
5807       tree id;
5808       if (c_parser_next_token_is_not (parser, CPP_NAME))
5809         {
5810           c_parser_error (parser, "expected identifier");
5811           break;
5812         }
5813       id = c_parser_peek_token (parser)->value;
5814       list = chainon (list, build_tree_list (NULL_TREE, id));
5815       c_parser_consume_token (parser);
5816       if (c_parser_next_token_is (parser, CPP_COMMA))
5817         c_parser_consume_token (parser);
5818       else
5819         break;
5820     }
5821   c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
5822   objc_declare_class (list);
5823 }
5824
5825 /* Parse an objc-alias-declaration.
5826
5827    objc-alias-declaration:
5828      @compatibility_alias identifier identifier ;
5829 */
5830
5831 static void
5832 c_parser_objc_alias_declaration (c_parser *parser)
5833 {
5834   tree id1, id2;
5835   gcc_assert (c_parser_next_token_is_keyword (parser, RID_AT_ALIAS));
5836   c_parser_consume_token (parser);
5837   if (c_parser_next_token_is_not (parser, CPP_NAME))
5838     {
5839       c_parser_error (parser, "expected identifier");
5840       c_parser_skip_until_found (parser, CPP_SEMICOLON, NULL);
5841       return;
5842     }
5843   id1 = c_parser_peek_token (parser)->value;
5844   c_parser_consume_token (parser);
5845   if (c_parser_next_token_is_not (parser, CPP_NAME))
5846     {
5847       c_parser_error (parser, "expected identifier");
5848       c_parser_skip_until_found (parser, CPP_SEMICOLON, NULL);
5849       return;
5850     }
5851   id2 = c_parser_peek_token (parser)->value;
5852   c_parser_consume_token (parser);
5853   c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
5854   objc_declare_alias (id1, id2);
5855 }
5856
5857 /* Parse an objc-protocol-definition.
5858
5859    objc-protocol-definition:
5860      @protocol identifier objc-protocol-refs[opt] objc-methodprotolist @end
5861      @protocol identifier-list ;
5862
5863    "@protocol identifier ;" should be resolved as "@protocol
5864    identifier-list ;": objc-methodprotolist may not start with a
5865    semicolon in the first alternative if objc-protocol-refs are
5866    omitted.  */
5867
5868 static void
5869 c_parser_objc_protocol_definition (c_parser *parser)
5870 {
5871   gcc_assert (c_parser_next_token_is_keyword (parser, RID_AT_PROTOCOL));
5872   c_parser_consume_token (parser);
5873   if (c_parser_next_token_is_not (parser, CPP_NAME))
5874     {
5875       c_parser_error (parser, "expected identifier");
5876       return;
5877     }
5878   if (c_parser_peek_2nd_token (parser)->type == CPP_COMMA
5879       || c_parser_peek_2nd_token (parser)->type == CPP_SEMICOLON)
5880     {
5881       tree list = NULL_TREE;
5882       /* Any identifiers, including those declared as type names, are
5883          OK here.  */
5884       while (true)
5885         {
5886           tree id;
5887           if (c_parser_next_token_is_not (parser, CPP_NAME))
5888             {
5889               c_parser_error (parser, "expected identifier");
5890               break;
5891             }
5892           id = c_parser_peek_token (parser)->value;
5893           list = chainon (list, build_tree_list (NULL_TREE, id));
5894           c_parser_consume_token (parser);
5895           if (c_parser_next_token_is (parser, CPP_COMMA))
5896             c_parser_consume_token (parser);
5897           else
5898             break;
5899         }
5900       c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
5901       objc_declare_protocols (list);
5902     }
5903   else
5904     {
5905       tree id = c_parser_peek_token (parser)->value;
5906       tree proto = NULL_TREE;
5907       c_parser_consume_token (parser);
5908       if (c_parser_next_token_is (parser, CPP_LESS))
5909         proto = c_parser_objc_protocol_refs (parser);
5910       objc_pq_context = 1;
5911       objc_start_protocol (id, proto);
5912       c_parser_objc_methodprotolist (parser);
5913       c_parser_require_keyword (parser, RID_AT_END, "expected %<@end%>");
5914       objc_pq_context = 0;
5915       objc_finish_interface ();
5916     }
5917 }
5918
5919 /* Parse an objc-method-type.
5920
5921    objc-method-type:
5922      +
5923      -
5924 */
5925
5926 static enum tree_code
5927 c_parser_objc_method_type (c_parser *parser)
5928 {
5929   switch (c_parser_peek_token (parser)->type)
5930     {
5931     case CPP_PLUS:
5932       c_parser_consume_token (parser);
5933       return PLUS_EXPR;
5934     case CPP_MINUS:
5935       c_parser_consume_token (parser);
5936       return MINUS_EXPR;
5937     default:
5938       gcc_unreachable ();
5939     }
5940 }
5941
5942 /* Parse an objc-method-definition.
5943
5944    objc-method-definition:
5945      objc-method-type objc-method-decl ;[opt] compound-statement
5946 */
5947
5948 static void
5949 c_parser_objc_method_definition (c_parser *parser)
5950 {
5951   enum tree_code type = c_parser_objc_method_type (parser);
5952   tree decl;
5953   objc_set_method_type (type);
5954   objc_pq_context = 1;
5955   decl = c_parser_objc_method_decl (parser);
5956   if (c_parser_next_token_is (parser, CPP_SEMICOLON))
5957     {
5958       c_parser_consume_token (parser);
5959       if (pedantic)
5960         pedwarn ("extra semicolon in method definition specified");
5961     }
5962   if (!c_parser_next_token_is (parser, CPP_OPEN_BRACE))
5963     {
5964       c_parser_error (parser, "expected %<{%>");
5965       return;
5966     }
5967   objc_pq_context = 0;
5968   objc_start_method_definition (decl);
5969   add_stmt (c_parser_compound_statement (parser));
5970   objc_finish_method_definition (current_function_decl);
5971 }
5972
5973 /* Parse an objc-methodprotolist.
5974
5975    objc-methodprotolist:
5976      empty
5977      objc-methodprotolist objc-methodproto
5978      objc-methodprotolist declaration
5979      objc-methodprotolist ;
5980
5981    The declaration is a data definition, which may be missing
5982    declaration specifiers under the same rules and diagnostics as
5983    other data definitions outside functions, and the stray semicolon
5984    is diagnosed the same way as a stray semicolon outside a
5985    function.  */
5986
5987 static void
5988 c_parser_objc_methodprotolist (c_parser *parser)
5989 {
5990   while (true)
5991     {
5992       /* The list is terminated by @end.  */
5993       switch (c_parser_peek_token (parser)->type)
5994         {
5995         case CPP_SEMICOLON:
5996           if (pedantic)
5997             pedwarn ("ISO C does not allow extra %<;%> outside of a function");
5998           c_parser_consume_token (parser);
5999           break;
6000         case CPP_PLUS:
6001         case CPP_MINUS:
6002           c_parser_objc_methodproto (parser);
6003           break;
6004         case CPP_PRAGMA:
6005           c_parser_pragma (parser, pragma_external);
6006           break;
6007         case CPP_EOF:
6008           return;
6009         default:
6010           if (c_parser_next_token_is_keyword (parser, RID_AT_END))
6011             return;
6012           c_parser_declaration_or_fndef (parser, false, true, false, true);
6013           break;
6014         }
6015     }
6016 }
6017
6018 /* Parse an objc-methodproto.
6019
6020    objc-methodproto:
6021      objc-method-type objc-method-decl ;
6022 */
6023
6024 static void
6025 c_parser_objc_methodproto (c_parser *parser)
6026 {
6027   enum tree_code type = c_parser_objc_method_type (parser);
6028   tree decl;
6029   objc_set_method_type (type);
6030   /* Remember protocol qualifiers in prototypes.  */
6031   objc_pq_context = 1;
6032   decl = c_parser_objc_method_decl (parser);
6033   /* Forget protocol qualifiers here.  */
6034   objc_pq_context = 0;
6035   objc_add_method_declaration (decl);
6036   c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
6037 }
6038
6039 /* Parse an objc-method-decl.
6040
6041    objc-method-decl:
6042      ( objc-type-name ) objc-selector
6043      objc-selector
6044      ( objc-type-name ) objc-keyword-selector objc-optparmlist
6045      objc-keyword-selector objc-optparmlist
6046
6047    objc-keyword-selector:
6048      objc-keyword-decl
6049      objc-keyword-selector objc-keyword-decl
6050
6051    objc-keyword-decl:
6052      objc-selector : ( objc-type-name ) identifier
6053      objc-selector : identifier
6054      : ( objc-type-name ) identifier
6055      : identifier
6056
6057    objc-optparmlist:
6058      objc-optparms objc-optellipsis
6059
6060    objc-optparms:
6061      empty
6062      objc-opt-parms , parameter-declaration
6063
6064    objc-optellipsis:
6065      empty
6066      , ...
6067 */
6068
6069 static tree
6070 c_parser_objc_method_decl (c_parser *parser)
6071 {
6072   tree type = NULL_TREE;
6073   tree sel;
6074   tree parms = NULL_TREE;
6075   bool ellipsis = false;
6076
6077   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
6078     {
6079       c_parser_consume_token (parser);
6080       type = c_parser_objc_type_name (parser);
6081       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
6082     }
6083   sel = c_parser_objc_selector (parser);
6084   /* If there is no selector, or a colon follows, we have an
6085      objc-keyword-selector.  If there is a selector, and a colon does
6086      not follow, that selector ends the objc-method-decl.  */
6087   if (!sel || c_parser_next_token_is (parser, CPP_COLON))
6088     {
6089       tree tsel = sel;
6090       tree list = NULL_TREE;
6091       while (true)
6092         {
6093           tree atype = NULL_TREE, id, keyworddecl;
6094           if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
6095             break;
6096           if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
6097             {
6098               c_parser_consume_token (parser);
6099               atype = c_parser_objc_type_name (parser);
6100               c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
6101                                          "expected %<)%>");
6102             }
6103           if (c_parser_next_token_is_not (parser, CPP_NAME))
6104             {
6105               c_parser_error (parser, "expected identifier");
6106               return error_mark_node;
6107             }
6108           id = c_parser_peek_token (parser)->value;
6109           c_parser_consume_token (parser);
6110           keyworddecl = objc_build_keyword_decl (tsel, atype, id);
6111           list = chainon (list, keyworddecl);
6112           tsel = c_parser_objc_selector (parser);
6113           if (!tsel && c_parser_next_token_is_not (parser, CPP_COLON))
6114             break;
6115         }
6116       /* Parse the optional parameter list.  Optional Objective-C
6117          method parameters follow the C syntax, and may include '...'
6118          to denote a variable number of arguments.  */
6119       parms = make_node (TREE_LIST);
6120       while (c_parser_next_token_is (parser, CPP_COMMA))
6121         {
6122           struct c_parm *parm;
6123           c_parser_consume_token (parser);
6124           if (c_parser_next_token_is (parser, CPP_ELLIPSIS))
6125             {
6126               ellipsis = true;
6127               c_parser_consume_token (parser);
6128               break;
6129             }
6130           parm = c_parser_parameter_declaration (parser, NULL_TREE);
6131           if (parm == NULL)
6132             break;
6133           parms = chainon (parms,
6134                            build_tree_list (NULL_TREE, grokparm (parm)));
6135         }
6136       sel = list;
6137     }
6138   return objc_build_method_signature (type, sel, parms, ellipsis);
6139 }
6140
6141 /* Parse an objc-type-name.
6142
6143    objc-type-name:
6144      objc-type-qualifiers[opt] type-name
6145      objc-type-qualifiers[opt]
6146
6147    objc-type-qualifiers:
6148      objc-type-qualifier
6149      objc-type-qualifiers objc-type-qualifier
6150
6151    objc-type-qualifier: one of
6152      in out inout bycopy byref oneway
6153 */
6154
6155 static tree
6156 c_parser_objc_type_name (c_parser *parser)
6157 {
6158   tree quals = NULL_TREE;
6159   struct c_type_name *typename = NULL;
6160   tree type = NULL_TREE;
6161   while (true)
6162     {
6163       c_token *token = c_parser_peek_token (parser);
6164       if (token->type == CPP_KEYWORD
6165           && (token->keyword == RID_IN
6166               || token->keyword == RID_OUT
6167               || token->keyword == RID_INOUT
6168               || token->keyword == RID_BYCOPY
6169               || token->keyword == RID_BYREF
6170               || token->keyword == RID_ONEWAY))
6171         {
6172           quals = chainon (quals, build_tree_list (NULL_TREE, token->value));
6173           c_parser_consume_token (parser);
6174         }
6175       else
6176         break;
6177     }
6178   if (c_parser_next_token_starts_typename (parser))
6179     typename = c_parser_type_name (parser);
6180   if (typename)
6181     type = groktypename (typename);
6182   return build_tree_list (quals, type);
6183 }
6184
6185 /* Parse objc-protocol-refs.
6186
6187    objc-protocol-refs:
6188      < identifier-list >
6189 */
6190
6191 static tree
6192 c_parser_objc_protocol_refs (c_parser *parser)
6193 {
6194   tree list = NULL_TREE;
6195   gcc_assert (c_parser_next_token_is (parser, CPP_LESS));
6196   c_parser_consume_token (parser);
6197   /* Any identifiers, including those declared as type names, are OK
6198      here.  */
6199   while (true)
6200     {
6201       tree id;
6202       if (c_parser_next_token_is_not (parser, CPP_NAME))
6203         {
6204           c_parser_error (parser, "expected identifier");
6205           break;
6206         }
6207       id = c_parser_peek_token (parser)->value;
6208       list = chainon (list, build_tree_list (NULL_TREE, id));
6209       c_parser_consume_token (parser);
6210       if (c_parser_next_token_is (parser, CPP_COMMA))
6211         c_parser_consume_token (parser);
6212       else
6213         break;
6214     }
6215   c_parser_require (parser, CPP_GREATER, "expected %<>%>");
6216   return list;
6217 }
6218
6219 /* Parse an objc-try-catch-statement.
6220
6221    objc-try-catch-statement:
6222      @try compound-statement objc-catch-list[opt]
6223      @try compound-statement objc-catch-list[opt] @finally compound-statement
6224
6225    objc-catch-list:
6226      @catch ( parameter-declaration ) compound-statement
6227      objc-catch-list @catch ( parameter-declaration ) compound-statement
6228 */
6229
6230 static void
6231 c_parser_objc_try_catch_statement (c_parser *parser)
6232 {
6233   location_t loc;
6234   tree stmt;
6235   gcc_assert (c_parser_next_token_is_keyword (parser, RID_AT_TRY));
6236   c_parser_consume_token (parser);
6237   loc = c_parser_peek_token (parser)->location;
6238   stmt = c_parser_compound_statement (parser);
6239   objc_begin_try_stmt (loc, stmt);
6240   while (c_parser_next_token_is_keyword (parser, RID_AT_CATCH))
6241     {
6242       struct c_parm *parm;
6243       c_parser_consume_token (parser);
6244       if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
6245         break;
6246       parm = c_parser_parameter_declaration (parser, NULL_TREE);
6247       if (parm == NULL)
6248         {
6249           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL);
6250           break;
6251         }
6252       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
6253       objc_begin_catch_clause (grokparm (parm));
6254       if (c_parser_require (parser, CPP_OPEN_BRACE, "expected %<{%>"))
6255         c_parser_compound_statement_nostart (parser);
6256       objc_finish_catch_clause ();
6257     }
6258   if (c_parser_next_token_is_keyword (parser, RID_AT_FINALLY))
6259     {
6260       location_t finloc;
6261       tree finstmt;
6262       c_parser_consume_token (parser);
6263       finloc = c_parser_peek_token (parser)->location;
6264       finstmt = c_parser_compound_statement (parser);
6265       objc_build_finally_clause (finloc, finstmt);
6266     }
6267   objc_finish_try_stmt ();
6268 }
6269
6270 /* Parse an objc-synchronized-statement.
6271
6272    objc-synchronized-statement:
6273      @synchronized ( expression ) compound-statement
6274 */
6275
6276 static void
6277 c_parser_objc_synchronized_statement (c_parser *parser)
6278 {
6279   location_t loc;
6280   tree expr, stmt;
6281   gcc_assert (c_parser_next_token_is_keyword (parser, RID_AT_SYNCHRONIZED));
6282   c_parser_consume_token (parser);
6283   loc = c_parser_peek_token (parser)->location;
6284   if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
6285     {
6286       expr = c_parser_expression (parser).value;
6287       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
6288     }
6289   else
6290     expr = error_mark_node;
6291   stmt = c_parser_compound_statement (parser);
6292   objc_build_synchronized (loc, expr, stmt);
6293 }
6294
6295 /* Parse an objc-selector; return NULL_TREE without an error if the
6296    next token is not an objc-selector.
6297
6298    objc-selector:
6299      identifier
6300      one of
6301        enum struct union if else while do for switch case default
6302        break continue return goto asm sizeof typeof __alignof
6303        unsigned long const short volatile signed restrict _Complex
6304        in out inout bycopy byref oneway int char float double void _Bool
6305
6306    ??? Why this selection of keywords but not, for example, storage
6307    class specifiers?  */
6308
6309 static tree
6310 c_parser_objc_selector (c_parser *parser)
6311 {
6312   c_token *token = c_parser_peek_token (parser);
6313   tree value = token->value;
6314   if (token->type == CPP_NAME)
6315     {
6316       c_parser_consume_token (parser);
6317       return value;
6318     }
6319   if (token->type != CPP_KEYWORD)
6320     return NULL_TREE;
6321   switch (token->keyword)
6322     {
6323     case RID_ENUM:
6324     case RID_STRUCT:
6325     case RID_UNION:
6326     case RID_IF:
6327     case RID_ELSE:
6328     case RID_WHILE:
6329     case RID_DO:
6330     case RID_FOR:
6331     case RID_SWITCH:
6332     case RID_CASE:
6333     case RID_DEFAULT:
6334     case RID_BREAK:
6335     case RID_CONTINUE:
6336     case RID_RETURN:
6337     case RID_GOTO:
6338     case RID_ASM:
6339     case RID_SIZEOF:
6340     case RID_TYPEOF:
6341     case RID_ALIGNOF:
6342     case RID_UNSIGNED:
6343     case RID_LONG:
6344     case RID_CONST:
6345     case RID_SHORT:
6346     case RID_VOLATILE:
6347     case RID_SIGNED:
6348     case RID_RESTRICT:
6349     case RID_COMPLEX:
6350     case RID_IN:
6351     case RID_OUT:
6352     case RID_INOUT:
6353     case RID_BYCOPY:
6354     case RID_BYREF:
6355     case RID_ONEWAY:
6356     case RID_INT:
6357     case RID_CHAR:
6358     case RID_FLOAT:
6359     case RID_DOUBLE:
6360     case RID_VOID:
6361     case RID_BOOL:
6362       c_parser_consume_token (parser);
6363       return value;
6364     default:
6365       return NULL_TREE;
6366     }
6367 }
6368
6369 /* Parse an objc-selector-arg.
6370
6371    objc-selector-arg:
6372      objc-selector
6373      objc-keywordname-list
6374
6375    objc-keywordname-list:
6376      objc-keywordname
6377      objc-keywordname-list objc-keywordname
6378
6379    objc-keywordname:
6380      objc-selector :
6381      :
6382 */
6383
6384 static tree
6385 c_parser_objc_selector_arg (c_parser *parser)
6386 {
6387   tree sel = c_parser_objc_selector (parser);
6388   tree list = NULL_TREE;
6389   if (sel && c_parser_next_token_is_not (parser, CPP_COLON))
6390     return sel;
6391   while (true)
6392     {
6393       if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
6394         return list;
6395       list = chainon (list, build_tree_list (sel, NULL_TREE));
6396       sel = c_parser_objc_selector (parser);
6397       if (!sel && c_parser_next_token_is_not (parser, CPP_COLON))
6398         break;
6399     }
6400   return list;
6401 }
6402
6403 /* Parse an objc-receiver.
6404
6405    objc-receiver:
6406      expression
6407      class-name
6408      type-name
6409 */
6410
6411 static tree
6412 c_parser_objc_receiver (c_parser *parser)
6413 {
6414   if (c_parser_peek_token (parser)->type == CPP_NAME
6415       && (c_parser_peek_token (parser)->id_kind == C_ID_TYPENAME
6416           || c_parser_peek_token (parser)->id_kind == C_ID_CLASSNAME))
6417     {
6418       tree id = c_parser_peek_token (parser)->value;
6419       c_parser_consume_token (parser);
6420       return objc_get_class_reference (id);
6421     }
6422   return c_parser_expression (parser).value;
6423 }
6424
6425 /* Parse objc-message-args.
6426
6427    objc-message-args:
6428      objc-selector
6429      objc-keywordarg-list
6430
6431    objc-keywordarg-list:
6432      objc-keywordarg
6433      objc-keywordarg-list objc-keywordarg
6434
6435    objc-keywordarg:
6436      objc-selector : objc-keywordexpr
6437      : objc-keywordexpr
6438 */
6439
6440 static tree
6441 c_parser_objc_message_args (c_parser *parser)
6442 {
6443   tree sel = c_parser_objc_selector (parser);
6444   tree list = NULL_TREE;
6445   if (sel && c_parser_next_token_is_not (parser, CPP_COLON))
6446     return sel;
6447   while (true)
6448     {
6449       tree keywordexpr;
6450       if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
6451         return list;
6452       keywordexpr = c_parser_objc_keywordexpr (parser);
6453       list = chainon (list, build_tree_list (sel, keywordexpr));
6454       sel = c_parser_objc_selector (parser);
6455       if (!sel && c_parser_next_token_is_not (parser, CPP_COLON))
6456         break;
6457     }
6458   return list;
6459 }
6460
6461 /* Parse an objc-keywordexpr.
6462
6463    objc-keywordexpr:
6464      nonempty-expr-list
6465 */
6466
6467 static tree
6468 c_parser_objc_keywordexpr (c_parser *parser)
6469 {
6470   tree list = c_parser_expr_list (parser, true);
6471   if (TREE_CHAIN (list) == NULL_TREE)
6472     {
6473       /* Just return the expression, remove a level of
6474          indirection.  */
6475       return TREE_VALUE (list);
6476     }
6477   else
6478     {
6479       /* We have a comma expression, we will collapse later.  */
6480       return list;
6481     }
6482 }
6483
6484 \f
6485 /* Handle pragmas.  Some OpenMP pragmas are associated with, and therefore
6486    should be considered, statements.  ALLOW_STMT is true if we're within
6487    the context of a function and such pragmas are to be allowed.  Returns
6488    true if we actually parsed such a pragma.  */
6489
6490 static bool
6491 c_parser_pragma (c_parser *parser, enum pragma_context context)
6492 {
6493   unsigned int id;
6494
6495   id = c_parser_peek_token (parser)->pragma_kind;
6496   gcc_assert (id != PRAGMA_NONE);
6497
6498   switch (id)
6499     {
6500     case PRAGMA_OMP_BARRIER:
6501       if (context != pragma_compound)
6502         {
6503           if (context == pragma_stmt)
6504             c_parser_error (parser, "%<#pragma omp barrier%> may only be "
6505                             "used in compound statements");
6506           goto bad_stmt;
6507         }
6508       c_parser_omp_barrier (parser);
6509       return false;
6510
6511     case PRAGMA_OMP_FLUSH:
6512       if (context != pragma_compound)
6513         {
6514           if (context == pragma_stmt)
6515             c_parser_error (parser, "%<#pragma omp flush%> may only be "
6516                             "used in compound statements");
6517           goto bad_stmt;
6518         }
6519       c_parser_omp_flush (parser);
6520       return false;
6521
6522     case PRAGMA_OMP_THREADPRIVATE:
6523       c_parser_omp_threadprivate (parser);
6524       return false;
6525
6526     case PRAGMA_OMP_SECTION:
6527       error ("%<#pragma omp section%> may only be used in "
6528              "%<#pragma omp sections%> construct");
6529       c_parser_skip_until_found (parser, CPP_PRAGMA_EOL, NULL);
6530       return false;
6531
6532     case PRAGMA_GCC_PCH_PREPROCESS:
6533       c_parser_error (parser, "%<#pragma GCC pch_preprocess%> must be first");
6534       c_parser_skip_until_found (parser, CPP_PRAGMA_EOL, NULL);
6535       return false;
6536
6537     default:
6538       if (id < PRAGMA_FIRST_EXTERNAL)
6539         {
6540           if (context == pragma_external)
6541             {
6542             bad_stmt:
6543               c_parser_error (parser, "expected declaration specifiers");
6544               c_parser_skip_until_found (parser, CPP_PRAGMA_EOL, NULL);
6545               return false;
6546             }
6547           c_parser_omp_construct (parser);
6548           return true;
6549         }
6550       break;
6551     }
6552
6553   c_parser_consume_pragma (parser);
6554   c_invoke_pragma_handler (id);
6555
6556   /* Skip to EOL, but suppress any error message.  Those will have been 
6557      generated by the handler routine through calling error, as opposed
6558      to calling c_parser_error.  */
6559   parser->error = true;
6560   c_parser_skip_to_pragma_eol (parser);
6561
6562   return false;
6563 }
6564
6565 /* The interface the pragma parsers have to the lexer.  */
6566
6567 enum cpp_ttype
6568 pragma_lex (tree *value)
6569 {
6570   c_token *tok = c_parser_peek_token (the_parser);
6571   enum cpp_ttype ret = tok->type;
6572
6573   *value = tok->value;
6574   if (ret == CPP_PRAGMA_EOL || ret == CPP_EOF)
6575     ret = CPP_EOF;
6576   else
6577     {
6578       if (ret == CPP_KEYWORD)
6579         ret = CPP_NAME;
6580       c_parser_consume_token (the_parser);
6581     }
6582
6583   return ret;
6584 }
6585
6586 static void
6587 c_parser_pragma_pch_preprocess (c_parser *parser)
6588 {
6589   tree name = NULL;
6590
6591   c_parser_consume_pragma (parser);
6592   if (c_parser_next_token_is (parser, CPP_STRING))
6593     {
6594       name = c_parser_peek_token (parser)->value;
6595       c_parser_consume_token (parser);
6596     }
6597   else
6598     c_parser_error (parser, "expected string literal");
6599   c_parser_skip_to_pragma_eol (parser);
6600
6601   if (name)
6602     c_common_pch_pragma (parse_in, TREE_STRING_POINTER (name));
6603 }
6604 \f
6605 /* OpenMP 2.5 parsing routines.  */
6606
6607 /* Returns name of the next clause.
6608    If the clause is not recognized PRAGMA_OMP_CLAUSE_NONE is returned and
6609    the token is not consumed.  Otherwise appropriate pragma_omp_clause is
6610    returned and the token is consumed.  */
6611
6612 static pragma_omp_clause
6613 c_parser_omp_clause_name (c_parser *parser)
6614 {
6615   pragma_omp_clause result = PRAGMA_OMP_CLAUSE_NONE;
6616
6617   if (c_parser_next_token_is_keyword (parser, RID_IF))
6618     result = PRAGMA_OMP_CLAUSE_IF;
6619   else if (c_parser_next_token_is_keyword (parser, RID_DEFAULT))
6620     result = PRAGMA_OMP_CLAUSE_DEFAULT;
6621   else if (c_parser_next_token_is (parser, CPP_NAME))
6622     {
6623       const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
6624
6625       switch (p[0])
6626         {
6627         case 'c':
6628           if (!strcmp ("copyin", p))
6629             result = PRAGMA_OMP_CLAUSE_COPYIN;
6630           else if (!strcmp ("copyprivate", p))
6631             result = PRAGMA_OMP_CLAUSE_COPYPRIVATE;
6632           break;
6633         case 'f':
6634           if (!strcmp ("firstprivate", p))
6635             result = PRAGMA_OMP_CLAUSE_FIRSTPRIVATE;
6636           break;
6637         case 'l':
6638           if (!strcmp ("lastprivate", p))
6639             result = PRAGMA_OMP_CLAUSE_LASTPRIVATE;
6640           break;
6641         case 'n':
6642           if (!strcmp ("nowait", p))
6643             result = PRAGMA_OMP_CLAUSE_NOWAIT;
6644           else if (!strcmp ("num_threads", p))
6645             result = PRAGMA_OMP_CLAUSE_NUM_THREADS;
6646           break;
6647         case 'o':
6648           if (!strcmp ("ordered", p))
6649             result = PRAGMA_OMP_CLAUSE_ORDERED;
6650           break;
6651         case 'p':
6652           if (!strcmp ("private", p))
6653             result = PRAGMA_OMP_CLAUSE_PRIVATE;
6654           break;
6655         case 'r':
6656           if (!strcmp ("reduction", p))
6657             result = PRAGMA_OMP_CLAUSE_REDUCTION;
6658           break;
6659         case 's':
6660           if (!strcmp ("schedule", p))
6661             result = PRAGMA_OMP_CLAUSE_SCHEDULE;
6662           else if (!strcmp ("shared", p))
6663             result = PRAGMA_OMP_CLAUSE_SHARED;
6664           break;
6665         }
6666     }
6667
6668   if (result != PRAGMA_OMP_CLAUSE_NONE)
6669     c_parser_consume_token (parser);
6670
6671   return result;
6672 }
6673
6674 /* Validate that a clause of the given type does not already exist.  */
6675
6676 static void
6677 check_no_duplicate_clause (tree clauses, enum tree_code code, const char *name)
6678 {
6679   tree c;
6680
6681   for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
6682     if (OMP_CLAUSE_CODE (c) == code)
6683       {
6684         error ("too many %qs clauses", name);
6685         break;
6686       }
6687 }
6688
6689 /* OpenMP 2.5:
6690    variable-list:
6691      identifier
6692      variable-list , identifier
6693
6694    If KIND is nonzero, create the appropriate node and install the decl
6695    in OMP_CLAUSE_DECL and add the node to the head of the list.
6696
6697    If KIND is zero, create a TREE_LIST with the decl in TREE_PURPOSE;
6698    return the list created.  */
6699
6700 static tree
6701 c_parser_omp_variable_list (c_parser *parser, enum omp_clause_code kind,
6702                             tree list)
6703 {
6704   if (c_parser_next_token_is_not (parser, CPP_NAME)
6705       || c_parser_peek_token (parser)->id_kind != C_ID_ID)
6706     c_parser_error (parser, "expected identifier");
6707
6708   while (c_parser_next_token_is (parser, CPP_NAME)
6709          && c_parser_peek_token (parser)->id_kind == C_ID_ID)
6710     {
6711       tree t = lookup_name (c_parser_peek_token (parser)->value);
6712
6713       if (t == NULL_TREE)
6714         undeclared_variable (c_parser_peek_token (parser)->value,
6715                              c_parser_peek_token (parser)->location);
6716       else if (t == error_mark_node)
6717         ;
6718       else if (kind != 0)
6719         {
6720           tree u = build_omp_clause (kind);
6721           OMP_CLAUSE_DECL (u) = t;
6722           OMP_CLAUSE_CHAIN (u) = list;
6723           list = u;
6724         }
6725       else
6726         list = tree_cons (t, NULL_TREE, list);
6727
6728       c_parser_consume_token (parser);
6729
6730       if (c_parser_next_token_is_not (parser, CPP_COMMA))
6731         break;
6732
6733       c_parser_consume_token (parser);
6734     }
6735
6736   return list;
6737 }
6738
6739 /* Similarly, but expect leading and trailing parenthesis.  This is a very
6740    common case for omp clauses.  */
6741
6742 static tree
6743 c_parser_omp_var_list_parens (c_parser *parser, enum tree_code kind, tree list)
6744 {
6745   if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
6746     {
6747       list = c_parser_omp_variable_list (parser, kind, list);
6748       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
6749     }
6750   return list;
6751 }
6752
6753 /* OpenMP 2.5:
6754    copyin ( variable-list ) */
6755
6756 static tree
6757 c_parser_omp_clause_copyin (c_parser *parser, tree list)
6758 {
6759   return c_parser_omp_var_list_parens (parser, OMP_CLAUSE_COPYIN, list);
6760 }
6761
6762 /* OpenMP 2.5:
6763    copyprivate ( variable-list ) */
6764
6765 static tree
6766 c_parser_omp_clause_copyprivate (c_parser *parser, tree list)
6767 {
6768   return c_parser_omp_var_list_parens (parser, OMP_CLAUSE_COPYPRIVATE, list);
6769 }
6770
6771 /* OpenMP 2.5:
6772    default ( shared | none ) */
6773
6774 static tree
6775 c_parser_omp_clause_default (c_parser *parser, tree list)
6776 {
6777   enum omp_clause_default_kind kind = OMP_CLAUSE_DEFAULT_UNSPECIFIED;
6778   tree c;
6779
6780   if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
6781     return list;
6782   if (c_parser_next_token_is (parser, CPP_NAME))
6783     {
6784       const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
6785
6786       switch (p[0])
6787         {
6788         case 'n':
6789           if (strcmp ("none", p) != 0)
6790             goto invalid_kind;
6791           kind = OMP_CLAUSE_DEFAULT_NONE;
6792           break;
6793
6794         case 's':
6795           if (strcmp ("shared", p) != 0)
6796             goto invalid_kind;
6797           kind = OMP_CLAUSE_DEFAULT_SHARED;
6798           break;
6799
6800         default:
6801           goto invalid_kind;
6802         }
6803
6804       c_parser_consume_token (parser);
6805     }
6806   else
6807     {
6808     invalid_kind:
6809       c_parser_error (parser, "expected %<none%> or %<shared%>");
6810     }
6811   c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
6812
6813   if (kind == OMP_CLAUSE_DEFAULT_UNSPECIFIED)
6814     return list;
6815
6816   check_no_duplicate_clause (list, OMP_CLAUSE_DEFAULT, "default");
6817   c = build_omp_clause (OMP_CLAUSE_DEFAULT);
6818   OMP_CLAUSE_CHAIN (c) = list;
6819   OMP_CLAUSE_DEFAULT_KIND (c) = kind;
6820
6821   return c;
6822 }
6823
6824 /* OpenMP 2.5:
6825    firstprivate ( variable-list ) */
6826
6827 static tree
6828 c_parser_omp_clause_firstprivate (c_parser *parser, tree list)
6829 {
6830   return c_parser_omp_var_list_parens (parser, OMP_CLAUSE_FIRSTPRIVATE, list);
6831 }
6832
6833 /* OpenMP 2.5:
6834    if ( expression ) */
6835
6836 static tree
6837 c_parser_omp_clause_if (c_parser *parser, tree list)
6838 {
6839   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
6840     {
6841       tree t = c_parser_paren_condition (parser);
6842       tree c;
6843
6844       check_no_duplicate_clause (list, OMP_CLAUSE_IF, "if");
6845
6846       c = build_omp_clause (OMP_CLAUSE_IF);
6847       OMP_CLAUSE_IF_EXPR (c) = t;
6848       OMP_CLAUSE_CHAIN (c) = list;
6849       list = c;
6850     }
6851   else
6852     c_parser_error (parser, "expected %<(%>");
6853
6854   return list;
6855 }
6856
6857 /* OpenMP 2.5:
6858    lastprivate ( variable-list ) */
6859
6860 static tree
6861 c_parser_omp_clause_lastprivate (c_parser *parser, tree list)
6862 {
6863   return c_parser_omp_var_list_parens (parser, OMP_CLAUSE_LASTPRIVATE, list);
6864 }
6865
6866 /* OpenMP 2.5:
6867    nowait */
6868
6869 static tree
6870 c_parser_omp_clause_nowait (c_parser *parser ATTRIBUTE_UNUSED, tree list)
6871 {
6872   tree c;
6873
6874   check_no_duplicate_clause (list, OMP_CLAUSE_NOWAIT, "nowait");
6875
6876   c = build_omp_clause (OMP_CLAUSE_NOWAIT);
6877   OMP_CLAUSE_CHAIN (c) = list;
6878   return c;
6879 }
6880
6881 /* OpenMP 2.5:
6882    num_threads ( expression ) */
6883
6884 static tree
6885 c_parser_omp_clause_num_threads (c_parser *parser, tree list)
6886 {
6887   if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
6888     {
6889       tree c, t = c_parser_expression (parser).value;
6890
6891       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
6892
6893       if (!INTEGRAL_TYPE_P (TREE_TYPE (t)))
6894         {
6895           c_parser_error (parser, "expected integer expression");
6896           return list;
6897         }
6898
6899       /* Attempt to statically determine when the number isn't positive.  */
6900       c = fold_build2 (LE_EXPR, boolean_type_node, t,
6901                        build_int_cst (TREE_TYPE (t), 0));
6902       if (c == boolean_true_node)
6903         {
6904           warning (0, "%<num_threads%> value must be positive");
6905           t = integer_one_node;
6906         }
6907
6908       check_no_duplicate_clause (list, OMP_CLAUSE_NUM_THREADS, "num_threads");
6909
6910       c = build_omp_clause (OMP_CLAUSE_NUM_THREADS);
6911       OMP_CLAUSE_NUM_THREADS_EXPR (c) = t;
6912       OMP_CLAUSE_CHAIN (c) = list;
6913       list = c;
6914     }
6915
6916   return list;
6917 }
6918
6919 /* OpenMP 2.5:
6920    ordered */
6921
6922 static tree
6923 c_parser_omp_clause_ordered (c_parser *parser ATTRIBUTE_UNUSED, tree list)
6924 {
6925   tree c;
6926
6927   check_no_duplicate_clause (list, OMP_CLAUSE_ORDERED, "ordered");
6928
6929   c = build_omp_clause (OMP_CLAUSE_ORDERED);
6930   OMP_CLAUSE_CHAIN (c) = list;
6931   return c;
6932 }
6933
6934 /* OpenMP 2.5:
6935    private ( variable-list ) */
6936
6937 static tree
6938 c_parser_omp_clause_private (c_parser *parser, tree list)
6939 {
6940   return c_parser_omp_var_list_parens (parser, OMP_CLAUSE_PRIVATE, list);
6941 }
6942
6943 /* OpenMP 2.5:
6944    reduction ( reduction-operator : variable-list )
6945
6946    reduction-operator:
6947      One of: + * - & ^ | && || */
6948
6949 static tree
6950 c_parser_omp_clause_reduction (c_parser *parser, tree list)
6951 {
6952   if (c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
6953     {
6954       enum tree_code code;
6955
6956       switch (c_parser_peek_token (parser)->type)
6957         {
6958         case CPP_PLUS:
6959           code = PLUS_EXPR;
6960           break;
6961         case CPP_MULT:
6962           code = MULT_EXPR;
6963           break;
6964         case CPP_MINUS:
6965           code = MINUS_EXPR;
6966           break;
6967         case CPP_AND:
6968           code = BIT_AND_EXPR;
6969           break;
6970         case CPP_XOR:
6971           code = BIT_XOR_EXPR;
6972           break;
6973         case CPP_OR:
6974           code = BIT_IOR_EXPR;
6975           break;
6976         case CPP_AND_AND:
6977           code = TRUTH_ANDIF_EXPR;
6978           break;
6979         case CPP_OR_OR:
6980           code = TRUTH_ORIF_EXPR;
6981           break;
6982         default:
6983           c_parser_error (parser,
6984                           "expected %<+%>, %<*%>, %<-%>, %<&%>, "
6985                           "%<^%>, %<|%>, %<&&%>, or %<||%>");
6986           c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, 0);
6987           return list;
6988         }
6989       c_parser_consume_token (parser);
6990       if (c_parser_require (parser, CPP_COLON, "expected %<:%>"))
6991         {
6992           tree nl, c;
6993
6994           nl = c_parser_omp_variable_list (parser, OMP_CLAUSE_REDUCTION, list);
6995           for (c = nl; c != list; c = OMP_CLAUSE_CHAIN (c))
6996             OMP_CLAUSE_REDUCTION_CODE (c) = code;
6997
6998           list = nl;
6999         }
7000       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
7001     }
7002   return list;
7003 }
7004
7005 /* OpenMP 2.5:
7006    schedule ( schedule-kind )
7007    schedule ( schedule-kind , expression )
7008
7009    schedule-kind:
7010      static | dynamic | guided | runtime
7011 */
7012
7013 static tree
7014 c_parser_omp_clause_schedule (c_parser *parser, tree list)
7015 {
7016   tree c, t;
7017
7018   if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
7019     return list;
7020
7021   c = build_omp_clause (OMP_CLAUSE_SCHEDULE);
7022
7023   if (c_parser_next_token_is (parser, CPP_NAME))
7024     {
7025       tree kind = c_parser_peek_token (parser)->value;
7026       const char *p = IDENTIFIER_POINTER (kind);
7027
7028       switch (p[0])
7029         {
7030         case 'd':
7031           if (strcmp ("dynamic", p) != 0)
7032             goto invalid_kind;
7033           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_DYNAMIC;
7034           break;
7035
7036         case 'g':
7037           if (strcmp ("guided", p) != 0)
7038             goto invalid_kind;
7039           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_GUIDED;
7040           break;
7041
7042         case 'r':
7043           if (strcmp ("runtime", p) != 0)
7044             goto invalid_kind;
7045           OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_RUNTIME;
7046           break;
7047
7048         default:
7049           goto invalid_kind;
7050         }
7051     }
7052   else if (c_parser_next_token_is_keyword (parser, RID_STATIC))
7053     OMP_CLAUSE_SCHEDULE_KIND (c) = OMP_CLAUSE_SCHEDULE_STATIC;
7054   else
7055     goto invalid_kind;
7056
7057   c_parser_consume_token (parser);
7058   if (c_parser_next_token_is (parser, CPP_COMMA))
7059     {
7060       c_parser_consume_token (parser);
7061
7062       t = c_parser_expr_no_commas (parser, NULL).value;
7063
7064       if (OMP_CLAUSE_SCHEDULE_KIND (c) == OMP_CLAUSE_SCHEDULE_RUNTIME)
7065         error ("schedule %<runtime%> does not take "
7066                "a %<chunk_size%> parameter");
7067       else if (TREE_CODE (TREE_TYPE (t)) == INTEGER_TYPE)
7068         OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c) = t;
7069       else
7070         c_parser_error (parser, "expected integer expression");
7071
7072       c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
7073     }
7074   else
7075     c_parser_skip_until_found (parser, CPP_CLOSE_PAREN,
7076                                "expected %<,%> or %<)%>");
7077
7078   check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule");
7079   OMP_CLAUSE_CHAIN (c) = list;
7080   return c;
7081
7082  invalid_kind:
7083   c_parser_error (parser, "invalid schedule kind");
7084   c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, 0);
7085   return list;
7086 }
7087
7088 /* OpenMP 2.5:
7089    shared ( variable-list ) */
7090
7091 static tree
7092 c_parser_omp_clause_shared (c_parser *parser, tree list)
7093 {
7094   return c_parser_omp_var_list_parens (parser, OMP_CLAUSE_SHARED, list);
7095 }
7096
7097 /* Parse all OpenMP clauses.  The set clauses allowed by the directive
7098    is a bitmask in MASK.  Return the list of clauses found; the result
7099    of clause default goes in *pdefault.  */
7100
7101 static tree
7102 c_parser_omp_all_clauses (c_parser *parser, unsigned int mask,
7103                           const char *where)
7104 {
7105   tree clauses = NULL;
7106
7107   while (c_parser_next_token_is_not (parser, CPP_PRAGMA_EOL))
7108     {
7109       const pragma_omp_clause c_kind = c_parser_omp_clause_name (parser);
7110       const char *c_name;
7111       tree prev = clauses;
7112
7113       switch (c_kind)
7114         {
7115         case PRAGMA_OMP_CLAUSE_COPYIN:
7116           clauses = c_parser_omp_clause_copyin (parser, clauses);
7117           c_name = "copyin";
7118           break;
7119         case PRAGMA_OMP_CLAUSE_COPYPRIVATE:
7120           clauses = c_parser_omp_clause_copyprivate (parser, clauses);
7121           c_name = "copyprivate";
7122           break;
7123         case PRAGMA_OMP_CLAUSE_DEFAULT:
7124           clauses = c_parser_omp_clause_default (parser, clauses);
7125           c_name = "default";
7126           break;
7127         case PRAGMA_OMP_CLAUSE_FIRSTPRIVATE:
7128           clauses = c_parser_omp_clause_firstprivate (parser, clauses);
7129           c_name = "firstprivate";
7130           break;
7131         case PRAGMA_OMP_CLAUSE_IF:
7132           clauses = c_parser_omp_clause_if (parser, clauses);
7133           c_name = "if";
7134           break;
7135         case PRAGMA_OMP_CLAUSE_LASTPRIVATE:
7136           clauses = c_parser_omp_clause_lastprivate (parser, clauses);
7137           c_name = "lastprivate";
7138           break;
7139         case PRAGMA_OMP_CLAUSE_NOWAIT:
7140           clauses = c_parser_omp_clause_nowait (parser, clauses);
7141           c_name = "nowait";
7142           break;
7143         case PRAGMA_OMP_CLAUSE_NUM_THREADS:
7144           clauses = c_parser_omp_clause_num_threads (parser, clauses);
7145           c_name = "num_threads";
7146           break;
7147         case PRAGMA_OMP_CLAUSE_ORDERED:
7148           clauses = c_parser_omp_clause_ordered (parser, clauses);
7149           c_name = "ordered";
7150           break;
7151         case PRAGMA_OMP_CLAUSE_PRIVATE:
7152           clauses = c_parser_omp_clause_private (parser, clauses);
7153           c_name = "private";
7154           break;
7155         case PRAGMA_OMP_CLAUSE_REDUCTION:
7156           clauses = c_parser_omp_clause_reduction (parser, clauses);
7157           c_name = "reduction";
7158           break;
7159         case PRAGMA_OMP_CLAUSE_SCHEDULE:
7160           clauses = c_parser_omp_clause_schedule (parser, clauses);
7161           c_name = "schedule";
7162           break;
7163         case PRAGMA_OMP_CLAUSE_SHARED:
7164           clauses = c_parser_omp_clause_shared (parser, clauses);
7165           c_name = "shared";
7166           break;
7167         default:
7168           c_parser_error (parser, "expected %<#pragma omp%> clause");
7169           goto saw_error;
7170         }
7171
7172       if (((mask >> c_kind) & 1) == 0 && !parser->error)
7173         {
7174           /* Remove the invalid clause(s) from the list to avoid
7175              confusing the rest of the compiler.  */
7176           clauses = prev;
7177           error ("%qs is not valid for %qs", c_name, where);
7178         }
7179     }
7180
7181  saw_error:
7182   c_parser_skip_to_pragma_eol (parser);
7183
7184   return c_finish_omp_clauses (clauses);
7185 }
7186
7187 /* OpenMP 2.5:
7188    structured-block:
7189      statement
7190
7191    In practice, we're also interested in adding the statement to an
7192    outer node.  So it is convenient if we work around the fact that
7193    c_parser_statement calls add_stmt.  */
7194
7195 static tree
7196 c_parser_omp_structured_block (c_parser *parser)
7197 {
7198   tree stmt = push_stmt_list ();
7199   c_parser_statement (parser);
7200   return pop_stmt_list (stmt);
7201 }
7202
7203 /* OpenMP 2.5:
7204    # pragma omp atomic new-line
7205      expression-stmt
7206
7207    expression-stmt:
7208      x binop= expr | x++ | ++x | x-- | --x
7209    binop:
7210      +, *, -, /, &, ^, |, <<, >>
7211
7212   where x is an lvalue expression with scalar type.  */
7213
7214 static void
7215 c_parser_omp_atomic (c_parser *parser)
7216 {
7217   tree lhs, rhs;
7218   tree stmt;
7219   enum tree_code code;
7220
7221   c_parser_skip_to_pragma_eol (parser);
7222
7223   lhs = c_parser_unary_expression (parser).value;
7224   switch (TREE_CODE (lhs))
7225     {
7226     case ERROR_MARK:
7227     saw_error:
7228       c_parser_skip_to_end_of_block_or_statement (parser);
7229       return;
7230
7231     case PREINCREMENT_EXPR:
7232     case POSTINCREMENT_EXPR:
7233       lhs = TREE_OPERAND (lhs, 0);
7234       code = PLUS_EXPR;
7235       rhs = integer_one_node;
7236       break;
7237
7238     case PREDECREMENT_EXPR:
7239     case POSTDECREMENT_EXPR:
7240       lhs = TREE_OPERAND (lhs, 0);
7241       code = MINUS_EXPR;
7242       rhs = integer_one_node;
7243       break;
7244
7245     default:
7246       switch (c_parser_peek_token (parser)->type)
7247         {
7248         case CPP_MULT_EQ:
7249           code = MULT_EXPR;
7250           break;
7251         case CPP_DIV_EQ:
7252           code = TRUNC_DIV_EXPR;
7253           break;
7254         case CPP_PLUS_EQ:
7255           code = PLUS_EXPR;
7256           break;
7257         case CPP_MINUS_EQ:
7258           code = MINUS_EXPR;
7259           break;
7260         case CPP_LSHIFT_EQ:
7261           code = LSHIFT_EXPR;
7262           break;
7263         case CPP_RSHIFT_EQ:
7264           code = RSHIFT_EXPR;
7265           break;
7266         case CPP_AND_EQ:
7267           code = BIT_AND_EXPR;
7268           break;
7269         case CPP_OR_EQ:
7270           code = BIT_IOR_EXPR;
7271           break;
7272         case CPP_XOR_EQ:
7273           code = BIT_XOR_EXPR;
7274           break;
7275         default:
7276           c_parser_error (parser,
7277                           "invalid operator for %<#pragma omp atomic%>");
7278           goto saw_error;
7279         }
7280
7281       c_parser_consume_token (parser);
7282       rhs = c_parser_expression (parser).value;
7283       break;
7284     }
7285   stmt = c_finish_omp_atomic (code, lhs, rhs);
7286   if (stmt != error_mark_node)
7287     add_stmt (stmt);
7288   c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
7289 }
7290
7291
7292 /* OpenMP 2.5:
7293    # pragma omp barrier new-line
7294 */
7295
7296 static void
7297 c_parser_omp_barrier (c_parser *parser)
7298 {
7299   c_parser_consume_pragma (parser);
7300   c_parser_skip_to_pragma_eol (parser);
7301
7302   c_finish_omp_barrier ();
7303 }
7304
7305 /* OpenMP 2.5:
7306    # pragma omp critical [(name)] new-line
7307      structured-block
7308 */
7309
7310 static tree
7311 c_parser_omp_critical (c_parser *parser)
7312 {
7313   tree stmt, name = NULL;
7314
7315   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
7316     {
7317       c_parser_consume_token (parser);
7318       if (c_parser_next_token_is (parser, CPP_NAME))
7319         {
7320           name = c_parser_peek_token (parser)->value;
7321           c_parser_consume_token (parser);
7322           c_parser_require (parser, CPP_CLOSE_PAREN, "expected %<)%>");
7323         }
7324       else
7325         c_parser_error (parser, "expected identifier");
7326     }
7327   else if (c_parser_next_token_is_not (parser, CPP_PRAGMA_EOL))
7328     c_parser_error (parser, "expected %<(%> or end of line");
7329   c_parser_skip_to_pragma_eol (parser);
7330
7331   stmt = c_parser_omp_structured_block (parser);
7332   return c_finish_omp_critical (stmt, name);
7333 }
7334
7335 /* OpenMP 2.5:
7336    # pragma omp flush flush-vars[opt] new-line
7337
7338    flush-vars:
7339      ( variable-list ) */
7340
7341 static void
7342 c_parser_omp_flush (c_parser *parser)
7343 {
7344   c_parser_consume_pragma (parser);
7345   if (c_parser_next_token_is (parser, CPP_OPEN_PAREN))
7346     c_parser_omp_var_list_parens (parser, 0, NULL);
7347   else if (c_parser_next_token_is_not (parser, CPP_PRAGMA_EOL))
7348     c_parser_error (parser, "expected %<(%> or end of line");
7349   c_parser_skip_to_pragma_eol (parser);
7350
7351   c_finish_omp_flush ();
7352 }
7353
7354 /* Parse the restricted form of the for statment allowed by OpenMP.
7355    The real trick here is to determine the loop control variable early
7356    so that we can push a new decl if necessary to make it private.  */
7357
7358 static tree
7359 c_parser_omp_for_loop (c_parser *parser)
7360 {
7361   tree decl, cond, incr, save_break, save_cont, body, init;
7362   location_t loc;
7363
7364   if (!c_parser_next_token_is_keyword (parser, RID_FOR))
7365     {
7366       c_parser_error (parser, "for statement expected");
7367       return NULL;
7368     }
7369   loc = c_parser_peek_token (parser)->location;
7370   c_parser_consume_token (parser);
7371
7372   if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
7373     return NULL;
7374
7375   /* Parse the initialization declaration or expression.  */
7376   if (c_parser_next_token_starts_declspecs (parser))
7377     {
7378       c_parser_declaration_or_fndef (parser, true, true, true, true);
7379       decl = check_for_loop_decls ();
7380       if (decl == NULL)
7381         goto error_init;
7382       init = decl;
7383     }
7384   else if (c_parser_next_token_is (parser, CPP_NAME)
7385            && c_parser_peek_2nd_token (parser)->type == CPP_EQ)
7386     {
7387       decl = c_parser_postfix_expression (parser).value;
7388
7389       c_parser_require (parser, CPP_EQ, "expected %<=%>");
7390
7391       init = c_parser_expr_no_commas (parser, NULL).value;
7392       init = build_modify_expr (decl, NOP_EXPR, init);
7393       init = c_process_expr_stmt (init);
7394
7395       c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
7396     }
7397   else
7398     goto error_init;
7399
7400   /* Parse the loop condition.  */
7401   cond = NULL_TREE;
7402   if (c_parser_next_token_is_not (parser, CPP_SEMICOLON))
7403     {
7404       cond = c_parser_expression_conv (parser).value;
7405       cond = c_objc_common_truthvalue_conversion (cond);
7406       if (CAN_HAVE_LOCATION_P (cond))
7407         SET_EXPR_LOCATION (cond, input_location);
7408     }
7409   c_parser_skip_until_found (parser, CPP_SEMICOLON, "expected %<;%>");
7410
7411   /* Parse the increment expression.  */
7412   incr = NULL_TREE;
7413   if (c_parser_next_token_is_not (parser, CPP_CLOSE_PAREN))
7414     incr = c_process_expr_stmt (c_parser_expression (parser).value);
7415   c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
7416
7417  parse_body:
7418   save_break = c_break_label;
7419   c_break_label = size_one_node;
7420   save_cont = c_cont_label;
7421   c_cont_label = NULL_TREE;
7422   body = push_stmt_list ();
7423
7424   add_stmt (c_parser_c99_block_statement (parser));
7425   if (c_cont_label)
7426     add_stmt (build1 (LABEL_EXPR, void_type_node, c_cont_label));
7427
7428   body = pop_stmt_list (body);
7429   c_break_label = save_break;
7430   c_cont_label = save_cont;
7431
7432   /* Only bother calling c_finish_omp_for if we havn't already generated
7433      an error from the initialization parsing.  */
7434   if (decl != NULL && decl != error_mark_node && init != error_mark_node)
7435     return c_finish_omp_for (loc, decl, init, cond, incr, body, NULL);
7436   return NULL;
7437
7438  error_init:
7439   c_parser_error (parser, "expected iteration declaration or initialization");
7440   c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>");
7441   decl = init = cond = incr = NULL_TREE;
7442   goto parse_body;
7443 }
7444
7445 /* OpenMP 2.5:
7446    #pragma omp for for-clause[optseq] new-line
7447      for-loop
7448 */
7449
7450 #define OMP_FOR_CLAUSE_MASK                             \
7451         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
7452         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
7453         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
7454         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
7455         | (1u << PRAGMA_OMP_CLAUSE_ORDERED)             \
7456         | (1u << PRAGMA_OMP_CLAUSE_SCHEDULE)            \
7457         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
7458
7459 static tree
7460 c_parser_omp_for (c_parser *parser)
7461 {
7462   tree block, clauses, ret;
7463
7464   clauses = c_parser_omp_all_clauses (parser, OMP_FOR_CLAUSE_MASK,
7465                                       "#pragma omp for");
7466
7467   block = c_begin_compound_stmt (true);
7468   ret = c_parser_omp_for_loop (parser);
7469   if (ret)
7470     OMP_FOR_CLAUSES (ret) = clauses;
7471   block = c_end_compound_stmt (block, true);
7472   add_stmt (block);
7473
7474   return ret;
7475 }
7476
7477 /* OpenMP 2.5:
7478    # pragma omp master new-line
7479      structured-block
7480 */
7481
7482 static tree
7483 c_parser_omp_master (c_parser *parser)
7484 {
7485   c_parser_skip_to_pragma_eol (parser);
7486   return c_finish_omp_master (c_parser_omp_structured_block (parser));
7487 }
7488
7489 /* OpenMP 2.5:
7490    # pragma omp ordered new-line
7491      structured-block
7492 */
7493
7494 static tree
7495 c_parser_omp_ordered (c_parser *parser)
7496 {
7497   c_parser_skip_to_pragma_eol (parser);
7498   return c_finish_omp_ordered (c_parser_omp_structured_block (parser));
7499 }
7500
7501 /* OpenMP 2.5:
7502
7503    section-scope:
7504      { section-sequence }
7505
7506    section-sequence:
7507      section-directive[opt] structured-block
7508      section-sequence section-directive structured-block  */
7509
7510 static tree
7511 c_parser_omp_sections_scope (c_parser *parser)
7512 {
7513   tree stmt, substmt;
7514   bool error_suppress = false;
7515   location_t loc;
7516
7517   if (!c_parser_require (parser, CPP_OPEN_BRACE, "expected %<{%>"))
7518     {
7519       /* Avoid skipping until the end of the block.  */
7520       parser->error = false;
7521       return NULL_TREE;
7522     }
7523
7524   stmt = push_stmt_list ();
7525
7526   loc = c_parser_peek_token (parser)->location;
7527   if (c_parser_peek_token (parser)->pragma_kind != PRAGMA_OMP_SECTION)
7528     {
7529       substmt = push_stmt_list ();
7530
7531       while (1)
7532         {
7533           c_parser_statement (parser);
7534
7535           if (c_parser_peek_token (parser)->pragma_kind == PRAGMA_OMP_SECTION)
7536             break;
7537           if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
7538             break;
7539           if (c_parser_next_token_is (parser, CPP_EOF))
7540             break;
7541         }
7542
7543       substmt = pop_stmt_list (substmt);
7544       substmt = build1 (OMP_SECTION, void_type_node, substmt);
7545       SET_EXPR_LOCATION (substmt, loc);
7546       add_stmt (substmt);
7547     }
7548
7549   while (1)
7550     {
7551       if (c_parser_next_token_is (parser, CPP_CLOSE_BRACE))
7552         break;
7553       if (c_parser_next_token_is (parser, CPP_EOF))
7554         break;
7555
7556       loc = c_parser_peek_token (parser)->location;
7557       if (c_parser_peek_token (parser)->pragma_kind == PRAGMA_OMP_SECTION)
7558         {
7559           c_parser_consume_pragma (parser);
7560           c_parser_skip_to_pragma_eol (parser);
7561           error_suppress = false;
7562         }
7563       else if (!error_suppress)
7564         {
7565           error ("expected %<#pragma omp section%> or %<}%>");
7566           error_suppress = true;
7567         }
7568
7569       substmt = c_parser_omp_structured_block (parser);
7570       substmt = build1 (OMP_SECTION, void_type_node, substmt);
7571       SET_EXPR_LOCATION (substmt, loc);
7572       add_stmt (substmt);
7573     }
7574   c_parser_skip_until_found (parser, CPP_CLOSE_BRACE,
7575                              "expected %<#pragma omp section%> or %<}%>");
7576
7577   substmt = pop_stmt_list (stmt);
7578
7579   stmt = make_node (OMP_SECTIONS);
7580   TREE_TYPE (stmt) = void_type_node;
7581   OMP_SECTIONS_BODY (stmt) = substmt;
7582
7583   return add_stmt (stmt);
7584 }
7585
7586 /* OpenMP 2.5:
7587    # pragma omp sections sections-clause[optseq] newline
7588      sections-scope
7589 */
7590
7591 #define OMP_SECTIONS_CLAUSE_MASK                        \
7592         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
7593         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
7594         | (1u << PRAGMA_OMP_CLAUSE_LASTPRIVATE)         \
7595         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
7596         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
7597
7598 static tree
7599 c_parser_omp_sections (c_parser *parser)
7600 {
7601   tree block, clauses, ret;
7602
7603   clauses = c_parser_omp_all_clauses (parser, OMP_SECTIONS_CLAUSE_MASK,
7604                                       "#pragma omp sections");
7605
7606   block = c_begin_compound_stmt (true);
7607   ret = c_parser_omp_sections_scope (parser);
7608   if (ret)
7609     OMP_SECTIONS_CLAUSES (ret) = clauses;
7610   block = c_end_compound_stmt (block, true);
7611   add_stmt (block);
7612
7613   return ret;
7614 }
7615
7616 /* OpenMP 2.5:
7617    # pragma parallel parallel-clause new-line
7618    # pragma parallel for parallel-for-clause new-line
7619    # pragma parallel sections parallel-sections-clause new-line
7620 */
7621
7622 #define OMP_PARALLEL_CLAUSE_MASK                        \
7623         ( (1u << PRAGMA_OMP_CLAUSE_IF)                  \
7624         | (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
7625         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
7626         | (1u << PRAGMA_OMP_CLAUSE_DEFAULT)             \
7627         | (1u << PRAGMA_OMP_CLAUSE_SHARED)              \
7628         | (1u << PRAGMA_OMP_CLAUSE_COPYIN)              \
7629         | (1u << PRAGMA_OMP_CLAUSE_REDUCTION)           \
7630         | (1u << PRAGMA_OMP_CLAUSE_NUM_THREADS))
7631
7632 static tree
7633 c_parser_omp_parallel (c_parser *parser)
7634 {
7635   enum pragma_kind p_kind = PRAGMA_OMP_PARALLEL;
7636   const char *p_name = "#pragma omp parallel";
7637   tree stmt, clauses, par_clause, ws_clause, block;
7638   unsigned int mask = OMP_PARALLEL_CLAUSE_MASK;
7639
7640   if (c_parser_next_token_is_keyword (parser, RID_FOR))
7641     {
7642       c_parser_consume_token (parser);
7643       p_kind = PRAGMA_OMP_PARALLEL_FOR;
7644       p_name = "#pragma omp parallel for";
7645       mask |= OMP_FOR_CLAUSE_MASK;
7646       mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
7647     }
7648   else if (c_parser_next_token_is (parser, CPP_NAME))
7649     {
7650       const char *p = IDENTIFIER_POINTER (c_parser_peek_token (parser)->value);
7651       if (strcmp (p, "sections") == 0)
7652         {
7653           c_parser_consume_token (parser);
7654           p_kind = PRAGMA_OMP_PARALLEL_SECTIONS;
7655           p_name = "#pragma omp parallel sections";
7656           mask |= OMP_SECTIONS_CLAUSE_MASK;
7657           mask &= ~(1u << PRAGMA_OMP_CLAUSE_NOWAIT);
7658         }
7659     }
7660
7661   clauses = c_parser_omp_all_clauses (parser, mask, p_name);
7662
7663   switch (p_kind)
7664     {
7665     case PRAGMA_OMP_PARALLEL:
7666       block = c_begin_omp_parallel ();
7667       c_parser_statement (parser);
7668       stmt = c_finish_omp_parallel (clauses, block);
7669       break;
7670
7671     case PRAGMA_OMP_PARALLEL_FOR:
7672       block = c_begin_omp_parallel ();
7673       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
7674       stmt = c_parser_omp_for_loop (parser);
7675       if (stmt)
7676         OMP_FOR_CLAUSES (stmt) = ws_clause;
7677       stmt = c_finish_omp_parallel (par_clause, block);
7678       OMP_PARALLEL_COMBINED (stmt) = 1;
7679       break;
7680
7681     case PRAGMA_OMP_PARALLEL_SECTIONS:
7682       block = c_begin_omp_parallel ();
7683       c_split_parallel_clauses (clauses, &par_clause, &ws_clause);
7684       stmt = c_parser_omp_sections_scope (parser);
7685       if (stmt)
7686         OMP_SECTIONS_CLAUSES (stmt) = ws_clause;
7687       stmt = c_finish_omp_parallel (par_clause, block);
7688       OMP_PARALLEL_COMBINED (stmt) = 1;
7689       break;
7690
7691     default:
7692       gcc_unreachable ();
7693     }
7694
7695   return stmt;
7696 }
7697
7698 /* OpenMP 2.5:
7699    # pragma omp single single-clause[optseq] new-line
7700      structured-block
7701 */
7702
7703 #define OMP_SINGLE_CLAUSE_MASK                          \
7704         ( (1u << PRAGMA_OMP_CLAUSE_PRIVATE)             \
7705         | (1u << PRAGMA_OMP_CLAUSE_FIRSTPRIVATE)        \
7706         | (1u << PRAGMA_OMP_CLAUSE_COPYPRIVATE)         \
7707         | (1u << PRAGMA_OMP_CLAUSE_NOWAIT))
7708
7709 static tree
7710 c_parser_omp_single (c_parser *parser)
7711 {
7712   tree stmt = make_node (OMP_SINGLE);
7713   TREE_TYPE (stmt) = void_type_node;
7714
7715   OMP_SINGLE_CLAUSES (stmt)
7716     = c_parser_omp_all_clauses (parser, OMP_SINGLE_CLAUSE_MASK,
7717                                 "#pragma omp single");
7718   OMP_SINGLE_BODY (stmt) = c_parser_omp_structured_block (parser);
7719
7720   return add_stmt (stmt);
7721 }
7722
7723
7724 /* Main entry point to parsing most OpenMP pragmas.  */
7725
7726 static void
7727 c_parser_omp_construct (c_parser *parser)
7728 {
7729   enum pragma_kind p_kind;
7730   location_t loc;
7731   tree stmt;
7732
7733   loc = c_parser_peek_token (parser)->location;
7734   p_kind = c_parser_peek_token (parser)->pragma_kind;
7735   c_parser_consume_pragma (parser);
7736
7737   /* For all constructs below except #pragma omp atomic
7738      MUST_NOT_THROW catch handlers are needed when exceptions
7739      are enabled.  */
7740   if (p_kind != PRAGMA_OMP_ATOMIC)
7741     c_maybe_initialize_eh ();
7742
7743   switch (p_kind)
7744     {
7745     case PRAGMA_OMP_ATOMIC:
7746       c_parser_omp_atomic (parser);
7747       return;
7748     case PRAGMA_OMP_CRITICAL:
7749       stmt = c_parser_omp_critical (parser);
7750       break;
7751     case PRAGMA_OMP_FOR:
7752       stmt = c_parser_omp_for (parser);
7753       break;
7754     case PRAGMA_OMP_MASTER:
7755       stmt = c_parser_omp_master (parser);
7756       break;
7757     case PRAGMA_OMP_ORDERED:
7758       stmt = c_parser_omp_ordered (parser);
7759       break;
7760     case PRAGMA_OMP_PARALLEL:
7761       stmt = c_parser_omp_parallel (parser);
7762       break;
7763     case PRAGMA_OMP_SECTIONS:
7764       stmt = c_parser_omp_sections (parser);
7765       break;
7766     case PRAGMA_OMP_SINGLE:
7767       stmt = c_parser_omp_single (parser);
7768       break;
7769     default:
7770       gcc_unreachable ();
7771     }
7772
7773   if (stmt)
7774     SET_EXPR_LOCATION (stmt, loc);
7775 }
7776
7777
7778 /* OpenMP 2.5:
7779    # pragma omp threadprivate (variable-list) */
7780
7781 static void
7782 c_parser_omp_threadprivate (c_parser *parser)
7783 {
7784   tree vars, t;
7785
7786   c_parser_consume_pragma (parser);
7787   vars = c_parser_omp_var_list_parens (parser, 0, NULL);
7788
7789   /* Mark every variable in VARS to be assigned thread local storage.  */
7790   for (t = vars; t; t = TREE_CHAIN (t))
7791     {
7792       tree v = TREE_PURPOSE (t);
7793
7794       /* If V had already been marked threadprivate, it doesn't matter
7795          whether it had been used prior to this point.  */
7796       if (TREE_USED (v) && !C_DECL_THREADPRIVATE_P (v))
7797         error ("%qE declared %<threadprivate%> after first use", v);
7798       else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
7799         error ("automatic variable %qE cannot be %<threadprivate%>", v);
7800       else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
7801         error ("%<threadprivate%> %qE has incomplete type", v);
7802       else
7803         {
7804           if (! DECL_THREAD_LOCAL_P (v))
7805             {
7806               DECL_TLS_MODEL (v) = decl_default_tls_model (v);
7807               /* If rtl has been already set for this var, call
7808                  make_decl_rtl once again, so that encode_section_info
7809                  has a chance to look at the new decl flags.  */
7810               if (DECL_RTL_SET_P (v))
7811                 make_decl_rtl (v);
7812             }
7813           C_DECL_THREADPRIVATE_P (v) = 1;
7814         }
7815     }
7816
7817   c_parser_skip_to_pragma_eol (parser);
7818 }
7819
7820 \f
7821 /* Parse a single source file.  */
7822
7823 void
7824 c_parse_file (void)
7825 {
7826   /* Use local storage to begin.  If the first token is a pragma, parse it.
7827      If it is #pragma GCC pch_preprocess, then this will load a PCH file
7828      which will cause garbage collection.  */
7829   c_parser tparser;
7830
7831   memset (&tparser, 0, sizeof tparser);
7832   the_parser = &tparser;
7833
7834   if (c_parser_peek_token (&tparser)->pragma_kind == PRAGMA_GCC_PCH_PREPROCESS)
7835     c_parser_pragma_pch_preprocess (&tparser);
7836
7837   the_parser = GGC_NEW (c_parser);
7838   *the_parser = tparser;
7839
7840   c_parser_translation_unit (the_parser);
7841   the_parser = NULL;
7842 }
7843
7844 #include "gt-c-parser.h"