From c2a141a0f3fe5472f667083fa3f94bbfc1e400c2 Mon Sep 17 00:00:00 2001
From: Jeff Sturm <jsturm@one-point.com>
Date: Thu, 20 Nov 2003 03:34:59 +0000
Subject: [PATCH] re PR rtl-optimization/13024 (gcj can't build current rhug)

Fix PR java/13024.
* except.c (prepare_eh_table_type): Allocate variable-sized
buffer `buf' with alloca.

From-SVN: r73752
---
 gcc/java/ChangeLog |  6 ++++++
 gcc/java/except.c  | 20 +++++++++++---------
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index ea30c778e8ae..13c7625e522e 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,9 @@
+2003-11-19  Jeff Sturm  <jsturm@one-point.com>
+
+	Fix PR java/13024.
+	* except.c (prepare_eh_table_type): Allocate variable-sized
+	buffer `buf' with alloca.
+
 2003-11-17  Jeff Sturm  <jsturm@one-point.com>
 
 	Fix PR java/12857.
diff --git a/gcc/java/except.c b/gcc/java/except.c
index dc97b42fabff..c0fa800c2620 100644
--- a/gcc/java/except.c
+++ b/gcc/java/except.c
@@ -312,6 +312,10 @@ tree
 prepare_eh_table_type (tree type)
 {
   tree exp;
+  const char *name;
+  char *buf;
+  tree decl;
+  tree utf8_ref;
 
   /* The "type" (match_info) in a (Java) exception table is a pointer to:
    * a) NULL - meaning match any type in a try-finally.
@@ -323,10 +327,9 @@ prepare_eh_table_type (tree type)
     exp = NULL_TREE;
   else if (is_compiled_class (type) && !flag_indirect_dispatch)
     {
-      char buf[64];
-      tree decl;
-      sprintf (buf, "%s_ref", 
-	       IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
+      name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
+      buf = alloca (strlen (name) + 5);
+      sprintf (buf, "%s_ref", name);
       decl = build_decl (VAR_DECL, get_identifier (buf), ptr_type_node);
       TREE_STATIC (decl) = 1;
       DECL_ARTIFICIAL (decl) = 1;
@@ -342,11 +345,10 @@ prepare_eh_table_type (tree type)
     }
   else
     {
-      tree decl;
-      tree utf8_ref = build_utf8_ref (DECL_NAME (TYPE_NAME (type)));
-      char buf[64];
-      sprintf (buf, "%s_ref", 
-	       IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (utf8_ref, 0))));
+      utf8_ref = build_utf8_ref (DECL_NAME (TYPE_NAME (type)));
+      name = IDENTIFIER_POINTER (DECL_NAME (TREE_OPERAND (utf8_ref, 0)));
+      buf = alloca (strlen (name) + 5);
+      sprintf (buf, "%s_ref", name);
       decl = build_decl (VAR_DECL, get_identifier (buf), utf8const_ptr_type);
       TREE_STATIC (decl) = 1;
       DECL_ARTIFICIAL (decl) = 1;
-- 
GitLab