diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | awk.h | 37 |
2 files changed, 27 insertions, 18 deletions
@@ -1,3 +1,11 @@ +2017-04-21 Arnold D. Robbins <arnold@skeeve.com> + + * awk.h (NODE): Put the `val' subportion back the way it + was and move valref (formerly sref) out of the unions + entirely. This was the real problem. Rework the corresponding + commentary. + [valref]: Removed the macro definition. + 2017-04-20 Arnold D. Robbins <arnold@skeeve.com> * configure.ac: Make letter case usage in the various @@ -365,21 +365,6 @@ typedef struct exp_node { } nodep; struct { - // April 2017: - // The NODE union will be the death of me yet. :-( - // - // On 64 bit Intel systems, at least, if compiling - // without MPFR, the pointers need to come before the - // the double. Otherwise things break pretty - // badly. This doesn't happen on 32 bit compiles. - // I saw this on GCC 5.4.0, GCC 6.3.0, PCC, TCC - // and clang 3.8.0. It's way too much work to - // try to figure out why. So I just put pointers, - // then the double, then the size_t's, and then - // the rest. Sigh. - char *sp; - wchar_t *wsp; - struct exp_node *typre; #ifdef HAVE_MPFR union { AWKNUM fltnum; @@ -389,14 +374,31 @@ typedef struct exp_node { #else AWKNUM fltnum; #endif + char *sp; size_t slen; - size_t wslen; - long sref; int idx; + wchar_t *wsp; + size_t wslen; + struct exp_node *typre; } val; } sub; NODETYPE type; unsigned int flags; + // April 2017: + // The NODE union will be the death of me yet. :-( + // + // On 64 bit Intel systems, at least, if compiling without MPFR, + // the valref (formerly) sref field needs to be at the end. In its + // original position it overlapped with stuff in the nodep part of + // the union causing things to break pretty badly. This doesn't + // happen on 32 bit compiles. + // + // I saw this on GCC 4.9.0, GCC 5.4.0, GCC 6.3.0, PCC, TCC and + // clang 3.8.0. + // + // We simply move valref out of the unions entirely to avoid future + // problems. + long valref; /* type = Node_val */ /* @@ -506,7 +508,6 @@ typedef struct exp_node { */ #define stptr sub.val.sp #define stlen sub.val.slen -#define valref sub.val.sref #define stfmt sub.val.idx #define wstptr sub.val.wsp #define wstlen sub.val.wslen |