diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5af8932281ee..5218f1b7c64c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+1998-06-17  Jason Merrill  <jason@yorick.cygnus.com>
+
+	* class.c (finish_struct): Make conflicting use of id a pedwarn.
+	* decl.c (pushdecl_class_level): Likewise.
+
 1998-06-17  Mark Mitchell  <mark@markmitchell.com>
 
 	* pt.c (convert_nontype_argument): Issue an error when presented
diff --git a/gcc/cp/class.c b/gcc/cp/class.c
index 56c298434585..0b3e2e02b856 100644
--- a/gcc/cp/class.c
+++ b/gcc/cp/class.c
@@ -4300,7 +4300,9 @@ finish_struct (t, list_of_fieldlists, attributes, warn_anon)
 	      TREE_PROTECTED (DECL_RESULT (x)) = TREE_PROTECTED (x);
 	    }
 
-	  /* Check for inconsistent use of this name in the class body.
+	  /* A name N used in a class S shall refer to the same declaration
+	     in its context and when re-evaluated in the completed scope of S.
+
              Enums, types and static vars have already been checked.  */
 	  if (TREE_CODE (x) != TYPE_DECL && TREE_CODE (x) != USING_DECL
 	      && ! (TREE_CODE (x) == TEMPLATE_DECL
@@ -4325,10 +4327,10 @@ finish_struct (t, list_of_fieldlists, attributes, warn_anon)
 		  && !(TREE_CODE (icv) == TYPE_DECL
 		       && DECL_CONTEXT (icv) == t))
 		{
-		  cp_error_at ("declaration of identifier `%D' as `%+#D'",
-			       name, x);
-		  cp_error_at ("conflicts with other use in class as `%#D'",
-			       icv);
+		  cp_pedwarn_at ("declaration of identifier `%D' as `%+#D'",
+				 name, x);
+		  cp_pedwarn_at ("conflicts with other use in class as `%#D'",
+				 icv);
 		}
 	    }
 
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 6e5b102345ae..1aaa3de7e223 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -3726,7 +3726,9 @@ pushdecl_class_level (x)
     {
       if (TYPE_BEING_DEFINED (current_class_type))
 	{
-	  /* Check for inconsistent use of this name in the class body.
+	  /* A name N used in a class S shall refer to the same declaration
+	     in its context and when re-evaluated in the completed scope of S.
+
 	     Types, enums, and static vars are checked here; other
 	     members are checked in finish_struct.  */
 	  tree icv = IDENTIFIER_CLASS_VALUE (name);
@@ -3738,9 +3740,9 @@ pushdecl_class_level (x)
 	      && !(DECL_DECLARES_TYPE_P (icv)
 		   && DECL_CONTEXT (icv) == current_class_type))
 	    {
-	      cp_error ("declaration of identifier `%D' as `%#D'", name, x);
-	      cp_error_at ("conflicts with previous use in class as `%#D'",
-			   icv);
+	      cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
+	      cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
+			     icv);
 	    }
 	}