From 2aefa2c720e2825c9e094ed6e05a45fe602df55a Mon Sep 17 00:00:00 2001
From: Yichao Yu <yyc1992@gmail.com>
Date: Thu, 28 Jan 2016 11:43:52 -0500
Subject: [PATCH] Try to fix compilation with GCC 6.0
By removing flexible sized array in empty struct.
---
src/codegen.cpp | 2 +-
src/dump.c | 2 +-
src/julia.h | 15 +++++++--------
3 files changed, 9 insertions(+), 10 deletions(-)
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 34cf573..1814d3b 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -4938,7 +4938,7 @@ extern "C" DLLEXPORT jl_value_t *jl_new_box(jl_value_t *v)
jl_value_t *box = (jl_value_t*)jl_gc_alloc_1w();
jl_set_typeof(box, jl_box_any_type);
// if (v) jl_gc_wb(box, v); // write block not needed: box was just allocated
- box->fieldptr[0] = v;
+ jl_data_ptr(box)[0] = v;
return box;
}
diff --git a/src/dump.c b/src/dump.c
index f3ee0e9..fe2788e 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -1686,7 +1686,7 @@ static void jl_reinit_item(ios_t *f, jl_value_t *v, int how) {
JL_TRY {
switch (how) {
case 1: { // rehash ObjectIdDict
- jl_array_t **a = (jl_array_t**)&v->fieldptr[0];
+ jl_array_t **a = (jl_array_t**)jl_data_ptr(v);
jl_idtable_rehash(a, jl_array_len(*a));
jl_gc_wb(v, *a);
break;
diff --git a/src/julia.h b/src/julia.h
index 29407e9..acda33c 100644
--- a/src/julia.h
+++ b/src/julia.h
@@ -84,7 +84,6 @@ extern "C" {
typedef struct _jl_value_t {
JL_DATA_TYPE
- struct _jl_value_t *fieldptr[];
} jl_value_t;
typedef struct {
@@ -690,17 +689,17 @@ STATIC_INLINE jl_value_t *jl_cellset(void *a, size_t i, void *x)
#define jl_tparam1(t) jl_svecref(((jl_datatype_t*)(t))->parameters, 1)
#define jl_tparam(t,i) jl_svecref(((jl_datatype_t*)(t))->parameters, i)
+// get a pointer to the data in a datatype
+#define jl_data_ptr(v) ((jl_value_t**)v)
+
#define jl_cell_data(a) ((jl_value_t**)((jl_array_t*)a)->data)
-#define jl_string_data(s) ((char*)((jl_array_t*)(s)->fieldptr[0])->data)
-#define jl_string_len(s) (jl_array_len(((jl_array_t*)(s)->fieldptr[0])))
-#define jl_iostr_data(s) ((char*)((jl_array_t*)(s)->fieldptr[0])->data)
+#define jl_string_data(s) ((char*)((jl_array_t*)jl_data_ptr(s)[0])->data)
+#define jl_string_len(s) (jl_array_len(((jl_array_t*)jl_data_ptr(s)[0])))
+#define jl_iostr_data(s) ((char*)((jl_array_t*)jl_data_ptr(s)[0])->data)
#define jl_gf_mtable(f) ((jl_methtable_t*)((jl_function_t*)(f))->env)
#define jl_gf_name(f) (jl_gf_mtable(f)->name)
-// get a pointer to the data in a datatype
-#define jl_data_ptr(v) (((jl_value_t*)v)->fieldptr)
-
// struct type info
#define jl_field_name(st,i) (jl_sym_t*)jl_svecref(((jl_datatype_t*)st)->name->names, (i))
#define jl_field_type(st,i) jl_svecref(((jl_datatype_t*)st)->types, (i))