OSDN Git Service

* lex.c (do_identifier): Fix thinko in previous change.
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Aug 1998 17:36:09 +0000 (17:36 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Aug 1998 17:36:09 +0000 (17:36 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@22064 138bc75d-0d04-0410-961f-82ee72b054a4

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

index dcf090b..bc93b87 100644 (file)
@@ -1,3 +1,7 @@
+1998-08-28  Mark Mitchell  <mark@markmitchell.com>
+
+       * lex.c (do_identifier): Fix thinko in previous change.
+
 1998-08-28  Jason Merrill  <jason@yorick.cygnus.com>
 
        * search.c (dfs_search, binfo_for_vtable, dfs_bfv_helper): New fns.
        * decl.c (finish_enum): Don't set the TREE_TYPE for the
        enumeration constant values if we're processing_template_decls.
        Don't set the type for the CONST_DECLs either; that's done in
-       build_enumerator. (
+       build_enumerator. 
        (build_enumerator): Take the enumeration type as a
-       paramter. 
+       parameter. 
        * lex.c (do_identifier): Don't resolve enumeration constants while
        processing template declarations, even if they happen to be
        TEMPLATE_PARM_INDEXs. 
+
        * parse.y (current_enum_type): New variable.
        (primary): Don't allow statement-expression in local classes just
        as we don't in global classes.
index 915b660..859a6be 100644 (file)
@@ -2985,11 +2985,14 @@ do_identifier (token, parsing, args)
          /* protected is OK, since it's an enum of `this'.  */
        }
       if (!processing_template_decl
-         /* Don't resolve enumeration constants while processing
-            template declarations, unless they're for global
-            enumerations and therefore cannot involve template
-            parameters.  */
-         || (!DECL_CONTEXT (id)
+         /* Really, if we're processing a template, we just want to
+            resolve template parameters, and not enumeration
+            constants.  But, they're hard to tell apart.  (Note that
+            a non-type template parameter may have enumeration type.)
+            Fortunately, there's no harm in resolving *global*
+            enumeration constants, since they can't depend on
+            template parameters.  */
+         || (TREE_CODE (CP_DECL_CONTEXT (id)) == NAMESPACE_DECL
              && TREE_CODE (DECL_INITIAL (id)) == TEMPLATE_PARM_INDEX))
        id = DECL_INITIAL (id);
     }