]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/68795: fix uninitialized close_paren_loc in cp_parser_postfix_expression
authorDavid Malcolm <dmalcolm@redhat.com>
Mon, 11 Jan 2016 18:03:15 +0000 (18:03 +0000)
committerDavid Malcolm <dmalcolm@gcc.gnu.org>
Mon, 11 Jan 2016 18:03:15 +0000 (18:03 +0000)
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

gcc/cp/ChangeLog
gcc/cp/parser.c

index 1f1212176e47c683ddb19f7de3f18c37e11029d4..023ed6489b0ab9c0139c67f63d2f1fbdb4be7ab6 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        PR c++/69211
index 44dff8739d0f49f5681e6eb97f31fccdcb810e94..13ed1ef0c53c2c0f6060e9569ef37dd1b495c188 100644 (file)
@@ -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;
            tsubst_flags_t complain = complain_flags (decltype_p);
            vec<tree, va_gc> *args;
-           location_t close_paren_loc;
+           location_t close_paren_loc = UNKNOWN_LOCATION;
 
             is_member_access = false;
 
@@ -6879,10 +6879,13 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p,
                                    koenig_p,
                                    complain);
 
-           location_t combined_loc = make_location (token->location,
-                                                    start_loc,
-                                                    close_paren_loc);
-           postfix_expression.set_location (combined_loc);
+           if (close_paren_loc != UNKNOWN_LOCATION)
+             {
+               location_t combined_loc = make_location (token->location,
+                                                        start_loc,
+                                                        close_paren_loc);
+               postfix_expression.set_location (combined_loc);
+             }
 
            /* The POSTFIX_EXPRESSION is certainly no longer an id.  */
            idk = CP_ID_KIND_NONE;
@@ -7351,7 +7354,10 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser,
    plain identifier argument, normal_attr for an attribute that wants
    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
-   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> *
 cp_parser_parenthesized_expression_list (cp_parser* parser,