Commit 655441d6 by David Malcolm Committed by David Malcolm

PR c++/68795: fix uninitialized close_paren_loc in cp_parser_postfix_expression

gcc/cp/ChangeLog:
	PR c++/68795
	* parser.c (cp_parser_postfix_expression): Initialize
	close_paren_loc to UNKNOWN_LOCATION; only use it if
	it has been written to by
	cp_parser_parenthesized_expression_list.
	(cp_parser_parenthesized_expression_list): Document the behavior
	with respect to the CLOSE_PAREN_LOC param.

From-SVN: r232238
parent 9cb6bd74
2016-01-11 David Malcolm <dmalcolm@redhat.com>
PR c++/68795
* parser.c (cp_parser_postfix_expression): Initialize
close_paren_loc to UNKNOWN_LOCATION; only use it if
it has been written to by
cp_parser_parenthesized_expression_list.
(cp_parser_parenthesized_expression_list): Document the behavior
with respect to the CLOSE_PAREN_LOC param.
2016-01-11 Jakub Jelinek <jakub@redhat.com> 2016-01-11 Jakub Jelinek <jakub@redhat.com>
PR c++/69211 PR c++/69211
......
...@@ -6717,7 +6717,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, ...@@ -6717,7 +6717,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
bool saved_non_integral_constant_expression_p = false; bool saved_non_integral_constant_expression_p = false;
tsubst_flags_t complain = complain_flags (decltype_p); tsubst_flags_t complain = complain_flags (decltype_p);
vec<tree, va_gc> *args; vec<tree, va_gc> *args;
location_t close_paren_loc; location_t close_paren_loc = UNKNOWN_LOCATION;
is_member_access = false; is_member_access = false;
...@@ -6879,10 +6879,13 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p, ...@@ -6879,10 +6879,13 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
koenig_p, koenig_p,
complain); complain);
location_t combined_loc = make_location (token->location, if (close_paren_loc != UNKNOWN_LOCATION)
start_loc, {
close_paren_loc); location_t combined_loc = make_location (token->location,
postfix_expression.set_location (combined_loc); start_loc,
close_paren_loc);
postfix_expression.set_location (combined_loc);
}
/* The POSTFIX_EXPRESSION is certainly no longer an id. */ /* The POSTFIX_EXPRESSION is certainly no longer an id. */
idk = CP_ID_KIND_NONE; idk = CP_ID_KIND_NONE;
...@@ -7351,7 +7354,10 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser, ...@@ -7351,7 +7354,10 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
plain identifier argument, normal_attr for an attribute that wants plain identifier argument, normal_attr for an attribute that wants
an expression, or non_attr if we aren't parsing an attribute list. If an expression, or non_attr if we aren't parsing an attribute list. If
NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or NON_CONSTANT_P is non-NULL, *NON_CONSTANT_P indicates whether or
not all of the expressions in the list were constant. */ not all of the expressions in the list were constant.
If CLOSE_PAREN_LOC is non-NULL, and no errors occur, then *CLOSE_PAREN_LOC
will be written to with the location of the closing parenthesis. If
an error occurs, it may or may not be written to. */
static vec<tree, va_gc> * static vec<tree, va_gc> *
cp_parser_parenthesized_expression_list (cp_parser* parser, cp_parser_parenthesized_expression_list (cp_parser* parser,
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment