diff options
Diffstat (limited to 'gcc/c-parser.c')
-rw-r--r-- | gcc/c-parser.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 99c6c18..5cb1982 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -5273,10 +5273,21 @@ c_parser_postfix_expression (c_parser *parser) c_parser_consume_token (parser); while (c_parser_next_token_is (parser, CPP_DOT) || c_parser_next_token_is (parser, - CPP_OPEN_SQUARE)) + CPP_OPEN_SQUARE) + || c_parser_next_token_is (parser, + CPP_DEREF)) { - if (c_parser_next_token_is (parser, CPP_DOT)) + if (c_parser_next_token_is (parser, CPP_DEREF)) + { + loc = c_parser_peek_token (parser)->location; + offsetof_ref = build_array_ref (offsetof_ref, + integer_zero_node, + loc); + goto do_dot; + } + else if (c_parser_next_token_is (parser, CPP_DOT)) { + do_dot: c_parser_consume_token (parser); if (c_parser_next_token_is_not (parser, CPP_NAME)) |