From dd4dc3cd02b36b757797e7b1eebc56e3a48aa2f9 Mon Sep 17 00:00:00 2001
From: Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
Date: Thu, 17 Jan 2002 20:34:40 +0000
Subject: [PATCH] attribs.c (decl_attributes): Clear ATTR_FLAG_TYPE_IN_PLACE if
 type_required and passed decl.

	* attribs.c (decl_attributes): Clear ATTR_FLAG_TYPE_IN_PLACE
	if type_required and passed decl.

From-SVN: r48964
---
 gcc/ChangeLog | 5 +++++
 gcc/attribs.c | 9 ++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 38dc3090b544..9b5241971edd 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 2f2096d1010c..7cb11724f832 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)
-- 
GitLab