diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 38dc3090b544e295b843aedf4f837db151c4a4f4..9b5241971eddc11b809a367a24f4686da6e4b0bd 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Thu Jan 17 15:28:26 2002  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
+
+	* attribs.c (decl_attributes): Clear ATTR_FLAG_TYPE_IN_PLACE
+	if type_required and passed decl.
+
 2002-01-17  Aldy Hernandez  <aldyh@redhat.com>
 
         * config.gcc (cpu_type): Include altivec.h in powerpc
diff --git a/gcc/attribs.c b/gcc/attribs.c
index 2f2096d1010ce081e5be3c3a0f195712eabe2060..7cb11724f8326275e25facae75c62b1e189a6add 100644
--- a/gcc/attribs.c
+++ b/gcc/attribs.c
@@ -338,8 +338,15 @@ decl_attributes (node, attributes, flags)
 	    }
 	}
 
+      /* If we require a type, but were passed a decl, set up to make a
+	 new type and update the one in the decl.  ATTR_FLAG_TYPE_IN_PLACE
+	 would have applied if we'd been passed a type, but we cannot modify
+	 the decl's type in place here.  */
       if (spec->type_required && DECL_P (*anode))
-	anode = &TREE_TYPE (*anode);
+	{
+	  anode = &TREE_TYPE (*anode);
+	  flags &= ~(int) ATTR_FLAG_TYPE_IN_PLACE;
+	}
 
       if (spec->function_type_required && TREE_CODE (*anode) != FUNCTION_TYPE
 	  && TREE_CODE (*anode) != METHOD_TYPE)