Blob Blame History Raw
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))