re PR c++/9623 (named initializer regression)
authorJason Merrill <jason@gcc.gnu.org>
Tue, 18 Feb 2003 18:16:19 +0000 (13:16 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 18 Feb 2003 18:16:19 +0000 (13:16 -0500)
        PR c++/9623
        * decl.c (reshape_init): Don't mess with initializer labels.

[[Split portion of a mixed commit.]]

From-SVN: r63044.2

gcc/cp/parser.c

index fab1ef4760b5d9cde4ca35435f6df17a573d8ce9..c81c3df5e94018f272e7c0297f91037d374cf83a 100644 (file)
@@ -4031,6 +4031,7 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p)
            parser->scope = NULL_TREE;
            parser->qualifying_scope = NULL_TREE;
            parser->object_scope = NULL_TREE;
+           idk = CP_PARSER_ID_KIND_NONE;
            /* Enter the scope corresponding to the type of the object
               given by the POSTFIX_EXPRESSION.  */
            if (!dependent_p 
@@ -4095,6 +4096,12 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p)
                    Even though "t" is dependent, "X::f" is not and has 
                   except that for a BASELINK there is no need to
                   include scope information.  */
+
+               /* But we do need to remember that there was an explicit
+                  scope for virtual function calls.  */
+               if (parser->scope)
+                 idk = CP_PARSER_ID_KIND_QUALIFIED;
+
                if (name != error_mark_node 
                    && !BASELINK_P (name)
                    && parser->scope)
@@ -4125,7 +4132,6 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p)
               object on the left-hand side of the `.' or `->'
               operator.  */
            parser->context->object_type = NULL_TREE;
-           idk = CP_PARSER_ID_KIND_NONE;
          }
          break;