From 55b21c7a644d052ae243adef866d1394fc85a9f1 Mon Sep 17 00:00:00 2001
From: Richard Frith-Macdonald <rfm@gnu.org>
Date: Mon, 28 Feb 2011 13:08:37 +0000
Subject: [PATCH] Fixed critical typo in Objective-C runtime garbage collection
 code

From-SVN: r170561
---
 libobjc/ChangeLog |  6 ++++++
 libobjc/gc.c      | 10 +++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog
index 3d85c9820416..a9399e6bea98 100644
--- a/libobjc/ChangeLog
+++ b/libobjc/ChangeLog
@@ -1,3 +1,9 @@
+2011-02-28  Richard Frith-Macdonald <rfm@gnu.org>
+
+	PR libobjc/47922
+	* gc.c (class_ivar_set_gcinvisible): Use _C_GCINVISIBLE instead of
+	a hardcoded "!".
+
 2011-02-13  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>
 
 	* configure: Regenerate.
diff --git a/libobjc/gc.c b/libobjc/gc.c
index d36a9cc77de9..5ea4f8a09158 100644
--- a/libobjc/gc.c
+++ b/libobjc/gc.c
@@ -422,11 +422,15 @@ class_ivar_set_gcinvisible (Class class, const char *ivarname,
 
 	  /* The variable is gc visible so we make it gc_invisible.  */
 	  new_type = objc_malloc (strlen(ivar->ivar_type) + 2);
+
+	  /* Copy the variable name.  */
 	  len = (type - ivar->ivar_type);
 	  memcpy (new_type, ivar->ivar_type, len);
-	  new_type[len] = 0;
-	  strcat (new_type, "!");
-	  strcat (new_type, type);
+	  /* Add '!'.  */
+	  new_type[len++] = _C_GCINVISIBLE;
+	  /* Copy the original types.  */
+	  strcpy (new_type + len, type);
+
 	  ivar->ivar_type = new_type;
 	}
 
-- 
GitLab