1 /* { dg-do compile } */
2 /* { dg-options "-O2 -fdump-tree-reassoc -w" } */
3 
4 typedef union tree_node *tree;
5 enum cpp_ttype { CPP_COLON, CPP_SEMICOLON, CPP_CLOSE_BRACE, CPP_COMMA };
6 enum rid { RID_STATIC = 0, RID_ATTRIBUTE, };
7 typedef struct c_token
8 {
9   enum cpp_ttype type:8;
10 }
11 c_token;
12 typedef struct c_parser
13 {
14   c_token tokens[2];
15   short tokens_avail;
16 }
17 c_parser;
18 __inline__ c_token *
c_parser_peek_token(c_parser * parser)19 c_parser_peek_token (c_parser * parser)
20 {
21   if (parser->tokens_avail == 0)
22     {
23       parser->tokens_avail = 1;
24     }
25   return &parser->tokens[0];
26 }
27 
28 __inline__ unsigned char
c_parser_next_token_is(c_parser * parser,enum cpp_ttype type)29 c_parser_next_token_is (c_parser * parser, enum cpp_ttype type)
30 {
31   return c_parser_peek_token (parser)->type == type;
32 }
33 
34 void
c_parser_translation_unit(c_parser * parser)35 c_parser_translation_unit (c_parser * parser)
36 {
37   tree prefix_attrs;
38   tree all_prefix_attrs;
39   while (1)
40     {
41       if (c_parser_next_token_is (parser, CPP_COLON)
42 	  || c_parser_next_token_is (parser, CPP_COMMA)
43 	  || c_parser_next_token_is (parser, CPP_SEMICOLON)
44 	  || c_parser_next_token_is (parser, CPP_CLOSE_BRACE)
45 	  || c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
46 	{
47 	  if (c_parser_next_token_is_keyword (parser, RID_ATTRIBUTE))
48 	    all_prefix_attrs =
49 	      chainon (c_parser_attributes (parser), prefix_attrs);
50 	}
51     }
52 }
53 /* { dg-final { scan-tree-dump-not "\[ (\]0 != 0" "reassoc2"} } */
54