lex.c (do_identifier): Look for class value even if we don't have a global value.
authorJason Merrill <jason@yorick.cygnus.com>
Sun, 19 Jul 1998 23:47:18 +0000 (23:47 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Sun, 19 Jul 1998 23:47:18 +0000 (19:47 -0400)
* lex.c (do_identifier): Look for class value even if we don't
have a global value.  Do implicit declaration if parsing is 2.
* semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
lookup.

From-SVN: r21291

gcc/cp/ChangeLog
gcc/cp/lex.c
gcc/cp/semantics.c

index 09a9b4b74c1a6387e421e8ef908be4065e5d83c9..bd3bd68e8f15ef2b1a53069f558fc2b7ca1a1968 100644 (file)
@@ -1,3 +1,10 @@
+1998-07-19  Jason Merrill  <jason@yorick.cygnus.com>
+
+       * lex.c (do_identifier): Look for class value even if we don't
+       have a global value.  Do implicit declaration if parsing is 2.
+       * semantics.c (finish_call_expr): Pass 2 if we're doing Koenig
+       lookup.
+
 1998-07-19  Mark Mitchell  <mark@markmitchell.com>
 
        * decl.c (pushtag): Revert previous change.
index 8573a8543fe53b1363317bd934898ec9f4fd2100..57639adfdeb49169ab799f9737db336569faa4b1 100644 (file)
@@ -2817,17 +2817,17 @@ do_identifier (token, parsing, args)
      tree args;
 {
   register tree id;
+  int lexing = (parsing == 1);
+  int in_call = (parsing == 2);
 
-  if (! parsing || IDENTIFIER_OPNAME_P (token))
+  if (! lexing || IDENTIFIER_OPNAME_P (token))
     id = lookup_name (token, 0);
   else
     id = lastiddecl;
 
-  if (parsing && yychar == YYEMPTY)
-    yychar = yylex ();
   /* Scope class declarations before global
      declarations.  */
-  if (id && is_global (id)
+  if ((!id || is_global (id))
       && current_class_type != 0
       && TYPE_SIZE (current_class_type) == 0)
     {
@@ -2894,7 +2894,7 @@ do_identifier (token, parsing, args)
            cp_error ("`%D' not defined", token);
          id = error_mark_node;
        }
-      else if (parsing && (yychar == '(' || yychar == LEFT_RIGHT))
+      else if (in_call)
        {
          id = implicitly_declare (token);
        }
index 241241d1791fea41920cb8997f6fd42b023d5ae8..50685129e08fdf4d63e5ea96bde2a368cd7a518e 100644 (file)
@@ -848,7 +848,7 @@ finish_call_expr (fn, args, koenig)
       if (TREE_CODE (fn) == BIT_NOT_EXPR)
        fn = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (fn, 0));
       else if (TREE_CODE (fn) != TEMPLATE_ID_EXPR)
-       fn = do_identifier (fn, 0, args);
+       fn = do_identifier (fn, 2, args);
     }
   result = build_x_function_call (fn, args, current_class_ref);