summaryrefslogtreecommitdiff
path: root/libguile/objcodes.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-12-14 23:11:47 +0100
committerLudovic Courtès <ludo@gnu.org>2009-12-15 01:01:16 +0100
commit3dbbe28dfd90cd7bf68d8d07771dffc724064311 (patch)
tree32dc56d5a966e1f895dd8c028d0f1ea9379016d3 /libguile/objcodes.c
parentcd169c5a2284c019b3909de67fc0e3f2b0a5dd44 (diff)
downloadguile-3dbbe28dfd90cd7bf68d8d07771dffc724064311.tar.gz
Don't use GCC zero-length arrays.
* libguile/frames.c, libguile/objcodes.c, libguile/programs.c, libguile/vm-engine.c, libguile/vm-i-system.c, libguile/vm.c: Use `SCM_C_OBJCODE_BASE ()' instead of accessing the `base' field of `struct scm_objcode'. * libguile/objcodes.h (struct scm_objcode)[base]: Remove.
Diffstat (limited to 'libguile/objcodes.c')
-rw-r--r--libguile/objcodes.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/libguile/objcodes.c b/libguile/objcodes.c
index 1b896df42..87ffaa5d1 100644
--- a/libguile/objcodes.c
+++ b/libguile/objcodes.c
@@ -106,17 +106,19 @@ scm_c_make_objcode_slice (SCM parent, const scm_t_uint8 *ptr)
#define FUNC_NAME "make-objcode-slice"
{
const struct scm_objcode *data, *parent_data;
+ const scm_t_uint8 *parent_base;
SCM ret;
SCM_VALIDATE_OBJCODE (1, parent);
parent_data = SCM_OBJCODE_DATA (parent);
-
- if (ptr < parent_data->base
- || ptr >= (parent_data->base + parent_data->len + parent_data->metalen
+ parent_base = SCM_C_OBJCODE_BASE (parent_data);
+
+ if (ptr < parent_base
+ || ptr >= (parent_base + parent_data->len + parent_data->metalen
- sizeof (struct scm_objcode)))
scm_misc_error (FUNC_NAME, "offset out of bounds (~a vs ~a + ~a + ~a)",
- scm_list_4 (scm_from_ulong ((unsigned long)ptr),
- scm_from_ulong ((unsigned long)parent_data->base),
+ scm_list_4 (scm_from_ulong ((unsigned long) ptr),
+ scm_from_ulong ((unsigned long) parent_base),
scm_from_uint32 (parent_data->len),
scm_from_uint32 (parent_data->metalen)));
@@ -125,9 +127,9 @@ scm_c_make_objcode_slice (SCM parent, const scm_t_uint8 *ptr)
assert ((((scm_t_bits) ptr) &
(alignof_type (struct scm_objcode) - 1UL)) == 0);
- data = (struct scm_objcode*)ptr;
- if (data->base + data->len + data->metalen > parent_data->base + parent_data->len + parent_data->metalen)
- abort ();
+ data = (struct scm_objcode*) ptr;
+ assert (SCM_C_OBJCODE_BASE (data) + data->len + data->metalen
+ <= parent_base + parent_data->len + parent_data->metalen);
SCM_NEWSMOB2 (ret, scm_tc16_objcode, data, parent);
SCM_SET_SMOB_FLAGS (ret, SCM_F_OBJCODE_IS_SLICE);