aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2003-01-23 17:40:42 +0000
committerTom Tromey <tromey@gcc.gnu.org>2003-01-23 17:40:42 +0000
commit0f0ff6ec541f245d32475c7dabe65d2a303a7fdd (patch)
tree776cef2837a148db4d5f6a975fa6091c4391523b /gcc/java
parent9a600d0c7f8c12236fd1e7fd060c0586c6211d9f (diff)
downloadgcc-0f0ff6ec541f245d32475c7dabe65d2a303a7fdd.zip
gcc-0f0ff6ec541f245d32475c7dabe65d2a303a7fdd.tar.gz
gcc-0f0ff6ec541f245d32475c7dabe65d2a303a7fdd.tar.bz2
* constants.c (set_constant_entry): Allocated cleared memory.
From-SVN: r61661
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog4
-rw-r--r--gcc/java/constants.c11
2 files changed, 13 insertions, 2 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index cf9ce67..092d5bd 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,7 @@
+2003-01-23 Tom Tromey <tromey@redhat.com>
+
+ * constants.c (set_constant_entry): Allocated cleared memory.
+
2003-01-22 Tom Tromey <tromey@redhat.com>
* java-tree.h: Don't use PARAMS.
diff --git a/gcc/java/constants.c b/gcc/java/constants.c
index cdf307c..1a56df0 100644
--- a/gcc/java/constants.c
+++ b/gcc/java/constants.c
@@ -46,12 +46,14 @@ set_constant_entry (CPool *cpool, int index, int tag, jword value)
if (cpool->data == NULL)
{
cpool->capacity = 100;
- cpool->tags = ggc_alloc (sizeof(uint8) * cpool->capacity);
- cpool->data = ggc_alloc (sizeof(union cpool_entry) * cpool->capacity);
+ cpool->tags = ggc_alloc_cleared (sizeof(uint8) * cpool->capacity);
+ cpool->data = ggc_alloc_cleared (sizeof(union cpool_entry)
+ * cpool->capacity);
cpool->count = 1;
}
if (index >= cpool->capacity)
{
+ int old_cap = cpool->capacity;
cpool->capacity *= 2;
if (index >= cpool->capacity)
cpool->capacity = index + 10;
@@ -59,6 +61,11 @@ set_constant_entry (CPool *cpool, int index, int tag, jword value)
sizeof(uint8) * cpool->capacity);
cpool->data = ggc_realloc (cpool->data,
sizeof(union cpool_entry) * cpool->capacity);
+
+ /* Make sure GC never sees uninitialized tag values. */
+ memset (cpool->tags + old_cap, 0, cpool->capacity - old_cap);
+ memset (cpool->data + old_cap, 0,
+ (cpool->capacity - old_cap) * sizeof (union cpool_entry));
}
if (index >= cpool->count)
cpool->count = index + 1;