From 6b990f0dd703328b48acd7321ca19c114fcfef9f Mon Sep 17 00:00:00 2001
From: Andrew Pinski <pinskia@physics.uc.edu>
Date: Mon, 12 Dec 2005 23:58:16 +0000
Subject: [PATCH] re PR objc/25348 (ICE encoding zero sized struct array)

2005-12-12  Andrew Pinski  <pinskia@physics.uc.edu>

        PR objc/25348
        * objc-act.c (encode_array): Handle arrays to zero sized types.
2005-12-12  Andrew Pinski  <pinskia@physics.uc.edu>

        PR objc/25348
        * objc.dg/encode-9.m: New test.

From-SVN: r108432
---
 gcc/objc/ChangeLog               |  5 +++++
 gcc/objc/objc-act.c              |  9 ++++++---
 gcc/testsuite/ChangeLog          |  5 +++++
 gcc/testsuite/objc.dg/encode-9.m | 13 +++++++++++++
 4 files changed, 29 insertions(+), 3 deletions(-)
 create mode 100644 gcc/testsuite/objc.dg/encode-9.m

diff --git a/gcc/objc/ChangeLog b/gcc/objc/ChangeLog
index f2a6fd692acb..5f7951f82db4 100644
--- a/gcc/objc/ChangeLog
+++ b/gcc/objc/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-12  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR objc/25348
+	* objc-act.c (encode_array): Handle arrays to zero sized types.
+
 2005-12-07  Rafael Ávila de Espíndola  <rafael.espindola@gmail.com>
 
 	* Make-lang.in (objc.all.build, objc.install-normal): Remove.
diff --git a/gcc/objc/objc-act.c b/gcc/objc/objc-act.c
index 817553a1eed3..201a722c2321 100644
--- a/gcc/objc/objc-act.c
+++ b/gcc/objc/objc-act.c
@@ -7920,9 +7920,12 @@ encode_array (tree type, int curtype, int format)
       return;
     }
 
-  sprintf (buffer, "[" HOST_WIDE_INT_PRINT_DEC,
-		   (TREE_INT_CST_LOW (an_int_cst)
-		    / TREE_INT_CST_LOW (TYPE_SIZE (array_of))));
+  if (TREE_INT_CST_LOW (TYPE_SIZE (array_of)) == 0)
+   sprintf (buffer, "[" HOST_WIDE_INT_PRINT_DEC, (HOST_WIDE_INT)0);
+  else 
+    sprintf (buffer, "[" HOST_WIDE_INT_PRINT_DEC,
+	     TREE_INT_CST_LOW (an_int_cst)
+	      / TREE_INT_CST_LOW (TYPE_SIZE (array_of)));
 
   obstack_grow (&util_obstack, buffer, strlen (buffer));
   encode_type (array_of, curtype, format);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 208450acf88a..8617accc364a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-12-12  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR objc/25348
+	* objc.dg/encode-9.m: New test.
+
 2005-12-12  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
 	PR testsuite/20772
diff --git a/gcc/testsuite/objc.dg/encode-9.m b/gcc/testsuite/objc.dg/encode-9.m
new file mode 100644
index 000000000000..3b005756f0f3
--- /dev/null
+++ b/gcc/testsuite/objc.dg/encode-9.m
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-fgnu-runtime " } */
+
+/* There was an ICE due to diving by zero in the objc front-end. */
+
+struct f
+{
+  int i;
+  struct{} g[4];
+  int tt;
+};
+
+char *e = @encode(struct f);
-- 
GitLab