From cbd03aee24f57b42a82a119e4182b442ef3b8db3 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Mon, 23 Nov 2015 21:00:13 +0000 Subject: Fix PR objc/68438 (uninitialized source ranges) gcc/c/ChangeLog: PR objc/68438 * c-parser.c (c_parser_postfix_expression): Set up source ranges for various Objective-C constructs: Class.name syntax, @selector(), @protocol(), @encode(), and [] message syntax. gcc/testsuite/ChangeLog: PR objc/68438 * objc.dg/plugin: New subdirectory. * objc.dg/plugin/diagnostic-test-expressions-1.m: New test file. * objc.dg/plugin/plugin.exp: New file, based on gcc.dg/plugin/plugin.exp. From-SVN: r230775 --- gcc/c/ChangeLog | 7 +++++++ gcc/c/c-parser.c | 17 ++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'gcc/c') diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index 96c5823..1e9314d 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,10 @@ +2015-11-23 David Malcolm + + PR objc/68438 + * c-parser.c (c_parser_postfix_expression): Set up source ranges + for various Objective-C constructs: Class.name syntax, + @selector(), @protocol(), @encode(), and [] message syntax. + 2015-11-20 David Malcolm PR 62314 diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 7b10764..18e9957 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -7338,10 +7338,13 @@ c_parser_postfix_expression (c_parser *parser) expr.value = error_mark_node; break; } - component = c_parser_peek_token (parser)->value; + c_token *component_tok = c_parser_peek_token (parser); + component = component_tok->value; + location_t end_loc = component_tok->get_finish (); c_parser_consume_token (parser); expr.value = objc_build_class_component_ref (class_name, component); + set_c_expr_source_range (&expr, loc, end_loc); break; } default: @@ -7816,9 +7819,11 @@ c_parser_postfix_expression (c_parser *parser) } { tree sel = c_parser_objc_selector_arg (parser); + location_t close_loc = c_parser_peek_token (parser)->location; c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>"); expr.value = objc_build_selector_expr (loc, sel); + set_c_expr_source_range (&expr, loc, close_loc); } break; case RID_AT_PROTOCOL: @@ -7839,9 +7844,11 @@ c_parser_postfix_expression (c_parser *parser) { tree id = c_parser_peek_token (parser)->value; c_parser_consume_token (parser); + location_t close_loc = c_parser_peek_token (parser)->location; c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<)%>"); expr.value = objc_build_protocol_expr (id); + set_c_expr_source_range (&expr, loc, close_loc); } break; case RID_AT_ENCODE: @@ -7860,11 +7867,13 @@ c_parser_postfix_expression (c_parser *parser) c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, NULL); break; } - c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, - "expected %<)%>"); { + location_t close_loc = c_parser_peek_token (parser)->location; + c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, + "expected %<)%>"); tree type = groktypename (t1, NULL, NULL); expr.value = objc_build_encode_expr (type); + set_c_expr_source_range (&expr, loc, close_loc); } break; case RID_GENERIC: @@ -7907,9 +7916,11 @@ c_parser_postfix_expression (c_parser *parser) c_parser_consume_token (parser); receiver = c_parser_objc_receiver (parser); args = c_parser_objc_message_args (parser); + location_t close_loc = c_parser_peek_token (parser)->location; c_parser_skip_until_found (parser, CPP_CLOSE_SQUARE, "expected %<]%>"); expr.value = objc_build_message_expr (receiver, args); + set_c_expr_source_range (&expr, loc, close_loc); break; } /* Else fall through to report error. */ -- cgit v1.1