Mock Version: 1.4.19 Mock Version: 1.4.19 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target ppc64le --nodeps /builddir/build/SPECS/moarvm.spec'], chrootPath='/var/lib/mock/epel8-build-17676135-1276362/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'}shell=Falselogger=timeout=201600uid=1000gid=425user='mockbuild'nspawn_args=[]unshare_net=TrueprintOutput=False) Executing command: ['bash', '--login', '-c', '/usr/bin/rpmbuild -bs --target ppc64le --nodeps /builddir/build/SPECS/moarvm.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'} and shell False Building target platforms: ppc64le Building for target ppc64le Wrote: /builddir/build/SRPMS/moarvm-0.2019.07.1-2.el8.src.rpm Child return code was: 0 ENTER ['do_with_status'](['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target ppc64le --nodeps /builddir/build/SPECS/moarvm.spec'], chrootPath='/var/lib/mock/epel8-build-17676135-1276362/root'env={'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'}shell=Falselogger=timeout=201600uid=1000gid=425user='mockbuild'nspawn_args=[]unshare_net=TrueprintOutput=False) Executing command: ['bash', '--login', '-c', '/usr/bin/rpmbuild -bb --target ppc64le --nodeps /builddir/build/SPECS/moarvm.spec'] with env {'TERM': 'vt100', 'SHELL': '/bin/bash', 'HOME': '/builddir', 'HOSTNAME': 'mock', 'PATH': '/usr/bin:/bin:/usr/sbin:/sbin', 'PROMPT_COMMAND': 'printf "\\033]0;\\007"', 'PS1': ' \\s-\\v\\$ ', 'LANG': 'C.UTF-8'} and shell False Building target platforms: ppc64le Building for target ppc64le Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.87oze1 + umask 022 + cd /builddir/build/BUILD + cd /builddir/build/BUILD + rm -rf MoarVM-2019.07.1 + /usr/bin/gzip -dc /builddir/build/SOURCES/MoarVM-2019.07.1.tar.gz + /usr/bin/tar -xof - + STATUS=0 + '[' 0 -ne 0 ']' + cd MoarVM-2019.07.1 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.jSouSr + umask 022 + cd /builddir/build/BUILD + cd MoarVM-2019.07.1 + rm -r 3rdparty/msinttypes + CFLAGS='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mcpu=power8 -mtune=power8 -funwind-tables -fstack-clash-protection' + LDFLAGS='-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' + ./Configure.pl --prefix=/usr --libdir=/usr/lib64 --has-libffi Welcome to MoarVM! Configuring native build environment ................... trying to compile a simple C program ............... YES probing support of -Werror=* ....................... YES Testing pkgconfig .................................. 1.4.2 OK probing whether your compiler thinks that it is gcc YES probing how your compiler does static inline ....... static __inline__ your CPU can't read unaligned values for any of int32 int64 num64 probing the size of pointers ....................... 8 JIT isn't supported on ppc64le-linux-thread-multi yet. probing C type support for: _Bool, bool ............ YES: _Bool,bool probing computed goto support ...................... YES probing pthread_yield support ...................... NO probing existance of optional malloc_trim() ........ YES probing support of rdtscp intrinsic ................ NO make: make compile: gcc -Werror=declaration-after-statement -Werror=pointer-arith -O3 -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DHAVE_LIBFFI -fPIC -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mcpu=power8 -mtune=power8 -funwind-tables -fstack-clash-protection includes: -I3rdparty/libuv/include -I3rdparty/libuv/src -I3rdparty/libatomicops/src -I3rdparty/libtommath link: gcc -O3 -DNDEBUG -Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld libs: -lffi -lm -lpthread -lrt -ldl byte order: little endian Configuring 3rdparty libs .............................. OK 3rdparty: 3rdparty/cmp/libcmp.a 3rdparty/libatomicops/src/libatomic_ops.a 3rdparty/libtommath/libtommath.a 3rdparty/libuv/libuv.a 3rdparty/sha1/libsha1.a 3rdparty/tinymt/libtinymt.a Generating src/gen/config.c ............................ OK Generating src/gen/config.h ............................ OK Generating Makefile .................................... OK Generating tools/check.mk .............................. OK Generating build/mk-moar-pc.pl ......................... OK Configuration SUCCESS. Type 'make' to build and 'make help' to see a list of available make targets. + make -j12 compiling src/main.o compiling src/core/callsite.o compiling src/core/args.o compiling src/core/exceptions.o compiling src/core/interp.o compiling src/core/threadcontext.o compiling src/core/compunit.o compiling src/core/bytecode.o compiling src/core/frame.o compiling src/core/callstack.o compiling src/core/validation.o compiling src/core/bytecodedump.o In file included from src/moar.h:100, from src/main.c:4: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/main.c:4: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/args.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/args.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/callsite.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/callsite.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/bytecode.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:100, from src/core/exceptions.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': In file included from src/moar.h:101, from src/core/bytecode.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/exceptions.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/compunit.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/compunit.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/frame.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/frame.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/threadcontext.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/threadcontext.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/main.c: In function 'main': src/main.c:161:10: warning: unused variable 'telemeh_inited' [-Wunused-variable] char telemeh_inited = 0; ^~~~~~~~~~~~~~ src/main.c:160:18: warning: unused variable 'interval_id' [-Wunused-variable] unsigned int interval_id; ^~~~~~~~~~~ In file included from src/moar.h:178, from src/main.c:4: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/main.c:4: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/core/callsite.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/callsite.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/validation.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:178, from src/core/compunit.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/compunit.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/validation.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/bytecode.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/bytecode.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/interp.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/interp.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/exceptions.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/exceptions.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/core/args.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/args.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/callstack.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/callstack.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/validation.c:1: At top level: In file included from src/moar.h:178, from src/core/frame.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/validation.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/bytecodedump.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:178, from src/core/threadcontext.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/threadcontext.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/bytecodedump.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/callstack.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/callstack.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/core/threads.o src/core/bytecodedump.c: In function 'bytecode_dump_frame_internal': src/core/bytecodedump.c:261:27: warning: unused variable 'num_locals' [-Wunused-variable] MVMuint16 num_locals = frame_has_inlines ? maybe_candidate->num_locals : frame->body.num_locals; ^~~~~~~~~~ src/core/bytecodedump.c:72:21: warning: unused variable 'k' [-Wunused-variable] MVMuint32 i, j, k; ^ In file included from src/moar.h:178, from src/core/bytecodedump.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/bytecodedump.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/core/ops.o compiling src/core/hll.o compiling src/core/loadbytecode.o compiling src/math/num.o src/core/interp.c: In function 'MVM_interp_run': src/core/interp.c:5496:44: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] MVMuint64 value = *(MVMuint32*)&num32; ^~~~~~~~~~~~~~~~~~ src/core/interp.c:5509:44: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] MVMuint64 value = *(MVMuint64*)&GET_REG(cur_op, 4).n64; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/core/interp.c:5490:22: warning: unused variable 'i' [-Wunused-variable] char i; ^ src/core/interp.c:5489:29: warning: unused variable 'byte' [-Wunused-variable] MVMRegister byte; ^~~~ src/core/interp.c:5587:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] GET_REG(cur_op, 0).n64 = *(MVMnum64 *)&read; ^~~~~~~~~~~~~~~~~ src/core/interp.c:5596:51: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] GET_REG(cur_op, 0).n64 = *(MVMnum32 *)&read; ^~~~~~~~~~~~~~~~~ src/core/interp.c:5764:27: warning: unused variable 'idx' [-Wunused-variable] MVMuint16 idx = GET_UI16(cur_op, 2); ^~~ src/core/interp.c:6264:29: warning: unused variable 'found' [-Wunused-variable] MVMRegister found; ^~~~~ src/core/interp.c:6282:29: warning: unused variable 'found' [-Wunused-variable] MVMRegister found; ^~~~~ src/core/interp.c:149:5: warning: label 'runloop' defined but not used [-Wunused-label] runloop: { ^~~~~~~ In file included from src/moar.h:100, from src/core/threads.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/threads.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/loadbytecode.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/loadbytecode.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/hll.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:100, from src/math/num.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': In file included from src/moar.h:101, from src/core/hll.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:178, from src/core/threads.c:1: At top level: In file included from src/moar.h:101, from src/math/num.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/threads.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/ops.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ src/core/bytecodedump.c: In function 'MVM_bytecode_dump': src/core/bytecodedump.c:89:22: warning: 'op_info' may be used uninitialized in this function [-Wmaybe-uninitialized] const MVMOpInfo *op_info; ^~~~~~~ In file included from src/moar.h:101, from src/core/ops.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/interp.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/interp.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/core/loadbytecode.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/loadbytecode.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/math/num.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/math/num.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/core/hll.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/hll.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/math/grisu.o compiling src/core/coerce.o src/math/grisu.c: In function 'double2diy_fp': src/math/grisu.c:38:23: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] #define CAST_U64(d) (*(uint64_t*)&d) ^~~~~~~~~~~~~~ #define MIN(x,y) ((x) <= (y) ? (x) : (y)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define MAX(x,y) ((x) >= (y) ? (x) : (y)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define MIN_CACHED_EXP -348 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define CACHED_EXP_STEP 8 ~~~~~~~~~~~~~~~~~~~~~~~~~ typedef struct diy_fp ~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t f; ~~~~~~~~~~~ int e; ~~~~~~ } diy_fp; ~~~~~~~~~ typedef struct power ~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t fract; ~~~~~~~~~~~~~~~ int16_t b_exp, d_exp; ~~~~~~~~~~~~~~~~~~~~~ } power; ~~~~~~~~ static const power pow_cache[] = ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ { ULL(0xfa8fd5a0081c0288), -1220, -348 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbaaee17fa23ebf76), -1193, -340 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8b16fb203055ac76), -1166, -332 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcf42894a5dce35ea), -1140, -324 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9a6bb0aa55653b2d), -1113, -316 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe61acf033d1a45df), -1087, -308 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xab70fe17c79ac6ca), -1060, -300 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xff77b1fcbebcdc4f), -1034, -292 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbe5691ef416bd60c), -1007, -284 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8dd01fad907ffc3c), -980, -276 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd3515c2831559a83), -954, -268 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9d71ac8fada6c9b5), -927, -260 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xea9c227723ee8bcb), -901, -252 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaecc49914078536d), -874, -244 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x823c12795db6ce57), -847, -236 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc21094364dfb5637), -821, -228 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9096ea6f3848984f), -794, -220 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd77485cb25823ac7), -768, -212 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa086cfcd97bf97f4), -741, -204 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xef340a98172aace5), -715, -196 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb23867fb2a35b28e), -688, -188 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x84c8d4dfd2c63f3b), -661, -180 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc5dd44271ad3cdba), -635, -172 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x936b9fcebb25c996), -608, -164 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xdbac6c247d62a584), -582, -156 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa3ab66580d5fdaf6), -555, -148 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf3e2f893dec3f126), -529, -140 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb5b5ada8aaff80b8), -502, -132 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x87625f056c7c4a8b), -475, -124 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc9bcff6034c13053), -449, -116 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x964e858c91ba2655), -422, -108 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xdff9772470297ebd), -396, -100 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa6dfbd9fb8e5b88f), -369, -92 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf8a95fcf88747d94), -343, -84 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb94470938fa89bcf), -316, -76 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8a08f0f8bf0f156b), -289, -68 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcdb02555653131b6), -263, -60 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x993fe2c6d07b7fac), -236, -52 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe45c10c42a2b3b06), -210, -44 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaa242499697392d3), -183, -36 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xfd87b5f28300ca0e), -157, -28 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbce5086492111aeb), -130, -20 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8cbccc096f5088cc), -103, -12 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd1b71758e219652c), -77, -4 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9c40000000000000), -50, 4 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe8d4a51000000000), -24, 12 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xad78ebc5ac620000), 3, 20 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x813f3978f8940984), 30, 28 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc097ce7bc90715b3), 56, 36 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8f7e32ce7bea5c70), 83, 44 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd5d238a4abe98068), 109, 52 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9f4f2726179a2245), 136, 60 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xed63a231d4c4fb27), 162, 68 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb0de65388cc8ada8), 189, 76 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x83c7088e1aab65db), 216, 84 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc45d1df942711d9a), 242, 92 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x924d692ca61be758), 269, 100 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xda01ee641a708dea), 295, 108 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa26da3999aef774a), 322, 116 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf209787bb47d6b85), 348, 124 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb454e4a179dd1877), 375, 132 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x865b86925b9bc5c2), 402, 140 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc83553c5c8965d3d), 428, 148 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x952ab45cfa97a0b3), 455, 156 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xde469fbd99a05fe3), 481, 164 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa59bc234db398c25), 508, 172 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf6c69a72a3989f5c), 534, 180 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb7dcbf5354e9bece), 561, 188 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x88fcf317f22241e2), 588, 196 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcc20ce9bd35c78a5), 614, 204 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x98165af37b2153df), 641, 212 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe2a0b5dc971f303a), 667, 220 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa8d9d1535ce3b396), 694, 228 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xfb9b7cd9a4a7443c), 720, 236 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbb764c4ca7a44410), 747, 244 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8bab8eefb6409c1a), 774, 252 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd01fef10a657842c), 800, 260 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9b10a4e5e9913129), 827, 268 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe7109bfba19c0c9d), 853, 276 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xac2820d9623bf429), 880, 284 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x80444b5e7aa7cf85), 907, 292 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbf21e44003acdd2d), 933, 300 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8e679c2f5e44ff8f), 960, 308 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd433179d9c8cb841), 986, 316 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9e19db92b4e31ba9), 1013, 324 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xeb96bf6ebadf77d9), 1039, 332 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaf87023b9bf0ee6b), 1066, 340 } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static int cached_pow(int exp, diy_fp *p) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int k = (int)ceil((exp+DIYFP_FRACT_SIZE-1) * D_1_LOG2_10); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int i = (k-MIN_CACHED_EXP-1) / CACHED_EXP_STEP + 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p->f = pow_cache[i].fract; ~~~~~~~~~~~~~~~~~~~~~~~~~~ p->e = pow_cache[i].b_exp; ~~~~~~~~~~~~~~~~~~~~~~~~~~ return pow_cache[i].d_exp; ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ static diy_fp minus(diy_fp x, diy_fp y) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ diy_fp d; d.f = x.f - y.f; d.e = x.e; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return d; ~~~~~~~~~ } ~ static diy_fp multiply(diy_fp x, diy_fp y) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t a, b, c, d, ac, bc, ad, bd, tmp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp r; ~~~~~~~~~ a = x.f >> 32; b = x.f & MASK32; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c = y.f >> 32; d = y.f & MASK32; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ac = a*c; bc = b*c; ~~~~~~~~~~~~~~~~~~~ ad = a*d; bd = b*d; ~~~~~~~~~~~~~~~~~~~ tmp = (bd >> 32) + (ad & MASK32) + (bc & MASK32); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tmp += 1U << 31; // round ~~~~~~~~~~~~~~~~~~~~~~~~~ r.f = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r.e = x.e + y.e + 64; ~~~~~~~~~~~~~~~~~~~~~ return r; ~~~~~~~~~ } ~ static diy_fp normalize_diy_fp(diy_fp n) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ while(!(n.f & ULL(0xFFC0000000000000))) { n.f <<= 10; n.e -= 10; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ while(!(n.f & D64_SIGN)) { n.f <<= 1; --n.e; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return n; ~~~~~~~~~ } ~ static diy_fp double2diy_fp(double d) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ diy_fp fp; ~~~~~~~~~~ uint64_t u64 = CAST_U64(d); ~~~~~~~~~~~~~~~~~~~~~~~~~ src/math/grisu.c:188:24: note: in expansion of macro 'CAST_U64' uint64_t u64 = CAST_U64(d); ^~~~~~~~ src/math/grisu.c: In function 'grisu3': src/math/grisu.c:38:23: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] #define CAST_U64(d) (*(uint64_t*)&d) ^~~~~~~~~~~~~~ #define MIN(x,y) ((x) <= (y) ? (x) : (y)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define MAX(x,y) ((x) >= (y) ? (x) : (y)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define MIN_CACHED_EXP -348 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define CACHED_EXP_STEP 8 ~~~~~~~~~~~~~~~~~~~~~~~~~ typedef struct diy_fp ~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t f; ~~~~~~~~~~~ int e; ~~~~~~ } diy_fp; ~~~~~~~~~ typedef struct power ~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t fract; ~~~~~~~~~~~~~~~ int16_t b_exp, d_exp; ~~~~~~~~~~~~~~~~~~~~~ } power; ~~~~~~~~ static const power pow_cache[] = ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ { ULL(0xfa8fd5a0081c0288), -1220, -348 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbaaee17fa23ebf76), -1193, -340 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8b16fb203055ac76), -1166, -332 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcf42894a5dce35ea), -1140, -324 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9a6bb0aa55653b2d), -1113, -316 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe61acf033d1a45df), -1087, -308 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xab70fe17c79ac6ca), -1060, -300 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xff77b1fcbebcdc4f), -1034, -292 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbe5691ef416bd60c), -1007, -284 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8dd01fad907ffc3c), -980, -276 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd3515c2831559a83), -954, -268 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9d71ac8fada6c9b5), -927, -260 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xea9c227723ee8bcb), -901, -252 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaecc49914078536d), -874, -244 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x823c12795db6ce57), -847, -236 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc21094364dfb5637), -821, -228 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9096ea6f3848984f), -794, -220 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd77485cb25823ac7), -768, -212 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa086cfcd97bf97f4), -741, -204 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xef340a98172aace5), -715, -196 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb23867fb2a35b28e), -688, -188 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x84c8d4dfd2c63f3b), -661, -180 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc5dd44271ad3cdba), -635, -172 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x936b9fcebb25c996), -608, -164 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xdbac6c247d62a584), -582, -156 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa3ab66580d5fdaf6), -555, -148 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf3e2f893dec3f126), -529, -140 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb5b5ada8aaff80b8), -502, -132 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x87625f056c7c4a8b), -475, -124 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc9bcff6034c13053), -449, -116 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x964e858c91ba2655), -422, -108 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xdff9772470297ebd), -396, -100 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa6dfbd9fb8e5b88f), -369, -92 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf8a95fcf88747d94), -343, -84 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb94470938fa89bcf), -316, -76 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8a08f0f8bf0f156b), -289, -68 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcdb02555653131b6), -263, -60 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x993fe2c6d07b7fac), -236, -52 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe45c10c42a2b3b06), -210, -44 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaa242499697392d3), -183, -36 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xfd87b5f28300ca0e), -157, -28 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbce5086492111aeb), -130, -20 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8cbccc096f5088cc), -103, -12 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd1b71758e219652c), -77, -4 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9c40000000000000), -50, 4 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe8d4a51000000000), -24, 12 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xad78ebc5ac620000), 3, 20 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x813f3978f8940984), 30, 28 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc097ce7bc90715b3), 56, 36 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8f7e32ce7bea5c70), 83, 44 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd5d238a4abe98068), 109, 52 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9f4f2726179a2245), 136, 60 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xed63a231d4c4fb27), 162, 68 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb0de65388cc8ada8), 189, 76 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x83c7088e1aab65db), 216, 84 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc45d1df942711d9a), 242, 92 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x924d692ca61be758), 269, 100 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xda01ee641a708dea), 295, 108 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa26da3999aef774a), 322, 116 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf209787bb47d6b85), 348, 124 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb454e4a179dd1877), 375, 132 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x865b86925b9bc5c2), 402, 140 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc83553c5c8965d3d), 428, 148 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x952ab45cfa97a0b3), 455, 156 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xde469fbd99a05fe3), 481, 164 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa59bc234db398c25), 508, 172 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf6c69a72a3989f5c), 534, 180 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb7dcbf5354e9bece), 561, 188 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x88fcf317f22241e2), 588, 196 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcc20ce9bd35c78a5), 614, 204 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x98165af37b2153df), 641, 212 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe2a0b5dc971f303a), 667, 220 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa8d9d1535ce3b396), 694, 228 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xfb9b7cd9a4a7443c), 720, 236 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbb764c4ca7a44410), 747, 244 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8bab8eefb6409c1a), 774, 252 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd01fef10a657842c), 800, 260 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9b10a4e5e9913129), 827, 268 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe7109bfba19c0c9d), 853, 276 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xac2820d9623bf429), 880, 284 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x80444b5e7aa7cf85), 907, 292 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbf21e44003acdd2d), 933, 300 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8e679c2f5e44ff8f), 960, 308 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd433179d9c8cb841), 986, 316 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9e19db92b4e31ba9), 1013, 324 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xeb96bf6ebadf77d9), 1039, 332 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaf87023b9bf0ee6b), 1066, 340 } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static int cached_pow(int exp, diy_fp *p) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int k = (int)ceil((exp+DIYFP_FRACT_SIZE-1) * D_1_LOG2_10); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int i = (k-MIN_CACHED_EXP-1) / CACHED_EXP_STEP + 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p->f = pow_cache[i].fract; ~~~~~~~~~~~~~~~~~~~~~~~~~~ p->e = pow_cache[i].b_exp; ~~~~~~~~~~~~~~~~~~~~~~~~~~ return pow_cache[i].d_exp; ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ static diy_fp minus(diy_fp x, diy_fp y) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ diy_fp d; d.f = x.f - y.f; d.e = x.e; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return d; ~~~~~~~~~ } ~ static diy_fp multiply(diy_fp x, diy_fp y) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t a, b, c, d, ac, bc, ad, bd, tmp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp r; ~~~~~~~~~ a = x.f >> 32; b = x.f & MASK32; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c = y.f >> 32; d = y.f & MASK32; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ac = a*c; bc = b*c; ~~~~~~~~~~~~~~~~~~~ ad = a*d; bd = b*d; ~~~~~~~~~~~~~~~~~~~ tmp = (bd >> 32) + (ad & MASK32) + (bc & MASK32); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tmp += 1U << 31; // round ~~~~~~~~~~~~~~~~~~~~~~~~~ r.f = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r.e = x.e + y.e + 64; ~~~~~~~~~~~~~~~~~~~~~ return r; ~~~~~~~~~ } ~ static diy_fp normalize_diy_fp(diy_fp n) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ while(!(n.f & ULL(0xFFC0000000000000))) { n.f <<= 10; n.e -= 10; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ while(!(n.f & D64_SIGN)) { n.f <<= 1; --n.e; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return n; ~~~~~~~~~ } ~ static diy_fp double2diy_fp(double d) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ diy_fp fp; ~~~~~~~~~~ uint64_t u64 = CAST_U64(d); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(u64 & D64_EXP_MASK)) { fp.f = u64 & D64_FRACT_MASK; fp.e = 1 - D64_EXP_BIAS; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ else { fp.f = (u64 & D64_FRACT_MASK) + D64_IMPLICIT_ONE; fp.e = (int)((u64 & D64_EXP_MASK) >> D64_EXP_POS) - D64_EXP_BIAS; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return fp; ~~~~~~~~~~ } ~ // pow10_cache[i] = 10^(i-1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static const unsigned int pow10_cache[] = { 0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static int largest_pow10(uint32_t n, int n_bits, uint32_t *power) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int guess = ((n_bits + 1) * 1233 >> 12) + 1/*skip first entry*/; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (n < pow10_cache[guess]) --guess; // We don't have any guarantees that 2^n_bits <= n. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *power = pow10_cache[guess]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return guess; ~~~~~~~~~~~~~ } ~ static int round_weed(char *buffer, int len, uint64_t wp_W, uint64_t delta, uint64_t rest, uint64_t ten_kappa, uint64_t ulp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t wp_Wup = wp_W - ulp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t wp_Wdown = wp_W + ulp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ while(rest < wp_Wup && delta - rest >= ten_kappa ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ && (rest + ten_kappa < wp_Wup || wp_Wup - rest >= rest + ten_kappa - wp_Wup)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ --buffer[len-1]; ~~~~~~~~~~~~~~~~ rest += ten_kappa; ~~~~~~~~~~~~~~~~~~ } ~ if (rest < wp_Wdown && delta - rest >= ten_kappa ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ && (rest + ten_kappa < wp_Wdown || wp_Wdown - rest > rest + ten_kappa - wp_Wdown)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return 0; ~~~~~~~~~ return 2*ulp <= rest && rest <= delta - 4*ulp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ static int digit_gen(diy_fp low, diy_fp w, diy_fp high, char *buffer, int *length, int *kappa) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t unit = 1; ~~~~~~~~~~~~~~~~~~ diy_fp too_low = { low.f - unit, low.e }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp too_high = { high.f + unit, high.e }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp unsafe_interval = minus(too_high, too_low); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp one = { ULL(1) << -w.e, w.e }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint32_t p1 = (uint32_t)(too_high.f >> -one.e); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t p2 = too_high.f & (one.f - 1); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint32_t div; ~~~~~~~~~~~~~ *kappa = largest_pow10(p1, DIYFP_FRACT_SIZE + one.e, &div); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *length = 0; ~~~~~~~~~~~~ while(*kappa > 0) ~~~~~~~~~~~~~~~~~ { ~ uint64_t rest; ~~~~~~~~~~~~~~ int digit = p1 / div; ~~~~~~~~~~~~~~~~~~~~~ buffer[*length] = (char)('0' + digit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++*length; ~~~~~~~~~~ p1 %= div; ~~~~~~~~~~ --*kappa; ~~~~~~~~~ rest = ((uint64_t)p1 << -one.e) + p2; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (rest < unsafe_interval.f) return round_weed(buffer, *length, minus(too_high, w).f, unsafe_interval.f, rest, (uint64_t)div << -one.e, unit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ div /= 10; ~~~~~~~~~~ } ~ for(;;) ~~~~~~~ { ~ int digit; ~~~~~~~~~~ p2 *= 10; ~~~~~~~~~ unit *= 10; ~~~~~~~~~~~ unsafe_interval.f *= 10; ~~~~~~~~~~~~~~~~~~~~~~~~ // Integer division by one. ~~~~~~~~~~~~~~~~~~~~~~~~~~~ digit = (int)(p2 >> -one.e); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buffer[*length] = (char)('0' + digit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++*length; ~~~~~~~~~~ p2 &= one.f - 1; // Modulo by one. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --*kappa; ~~~~~~~~~ if (p2 < unsafe_interval.f) return round_weed(buffer, *length, minus(too_high, w).f * unit, unsafe_interval.f, p2, one.f, unit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static int grisu3(double v, char *buffer, int *length, int *d_exp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int mk, kappa, success; ~~~~~~~~~~~~~~~~~~~~~~~ diy_fp dfp = double2diy_fp(v); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp w = normalize_diy_fp(dfp); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // normalize boundaries ~~~~~~~~~~~~~~~~~~~~~~~ diy_fp t = { (dfp.f << 1) + 1, dfp.e - 1 }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp b_plus = normalize_diy_fp(t); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp b_minus; ~~~~~~~~~~~~~~~ diy_fp c_mk; // Cached power of ten: 10^-k ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t u64 = CAST_U64(v); ~~~~~~~~~~~~~~~~~~~~~~~~~ src/math/grisu.c:275:24: note: in expansion of macro 'CAST_U64' uint64_t u64 = CAST_U64(v); ^~~~~~~~ src/math/grisu.c: In function 'dtoa_grisu3': src/math/grisu.c:38:23: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] #define CAST_U64(d) (*(uint64_t*)&d) ^~~~~~~~~~~~~~ #define MIN(x,y) ((x) <= (y) ? (x) : (y)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define MAX(x,y) ((x) >= (y) ? (x) : (y)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define MIN_CACHED_EXP -348 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ #define CACHED_EXP_STEP 8 ~~~~~~~~~~~~~~~~~~~~~~~~~ typedef struct diy_fp ~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t f; ~~~~~~~~~~~ int e; ~~~~~~ } diy_fp; ~~~~~~~~~ typedef struct power ~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t fract; ~~~~~~~~~~~~~~~ int16_t b_exp, d_exp; ~~~~~~~~~~~~~~~~~~~~~ } power; ~~~~~~~~ static const power pow_cache[] = ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ { ULL(0xfa8fd5a0081c0288), -1220, -348 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbaaee17fa23ebf76), -1193, -340 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8b16fb203055ac76), -1166, -332 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcf42894a5dce35ea), -1140, -324 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9a6bb0aa55653b2d), -1113, -316 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe61acf033d1a45df), -1087, -308 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xab70fe17c79ac6ca), -1060, -300 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xff77b1fcbebcdc4f), -1034, -292 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbe5691ef416bd60c), -1007, -284 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8dd01fad907ffc3c), -980, -276 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd3515c2831559a83), -954, -268 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9d71ac8fada6c9b5), -927, -260 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xea9c227723ee8bcb), -901, -252 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaecc49914078536d), -874, -244 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x823c12795db6ce57), -847, -236 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc21094364dfb5637), -821, -228 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9096ea6f3848984f), -794, -220 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd77485cb25823ac7), -768, -212 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa086cfcd97bf97f4), -741, -204 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xef340a98172aace5), -715, -196 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb23867fb2a35b28e), -688, -188 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x84c8d4dfd2c63f3b), -661, -180 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc5dd44271ad3cdba), -635, -172 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x936b9fcebb25c996), -608, -164 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xdbac6c247d62a584), -582, -156 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa3ab66580d5fdaf6), -555, -148 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf3e2f893dec3f126), -529, -140 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb5b5ada8aaff80b8), -502, -132 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x87625f056c7c4a8b), -475, -124 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc9bcff6034c13053), -449, -116 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x964e858c91ba2655), -422, -108 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xdff9772470297ebd), -396, -100 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa6dfbd9fb8e5b88f), -369, -92 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf8a95fcf88747d94), -343, -84 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb94470938fa89bcf), -316, -76 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8a08f0f8bf0f156b), -289, -68 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcdb02555653131b6), -263, -60 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x993fe2c6d07b7fac), -236, -52 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe45c10c42a2b3b06), -210, -44 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaa242499697392d3), -183, -36 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xfd87b5f28300ca0e), -157, -28 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbce5086492111aeb), -130, -20 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8cbccc096f5088cc), -103, -12 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd1b71758e219652c), -77, -4 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9c40000000000000), -50, 4 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe8d4a51000000000), -24, 12 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xad78ebc5ac620000), 3, 20 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x813f3978f8940984), 30, 28 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc097ce7bc90715b3), 56, 36 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8f7e32ce7bea5c70), 83, 44 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd5d238a4abe98068), 109, 52 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9f4f2726179a2245), 136, 60 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xed63a231d4c4fb27), 162, 68 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb0de65388cc8ada8), 189, 76 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x83c7088e1aab65db), 216, 84 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc45d1df942711d9a), 242, 92 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x924d692ca61be758), 269, 100 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xda01ee641a708dea), 295, 108 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa26da3999aef774a), 322, 116 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf209787bb47d6b85), 348, 124 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb454e4a179dd1877), 375, 132 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x865b86925b9bc5c2), 402, 140 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xc83553c5c8965d3d), 428, 148 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x952ab45cfa97a0b3), 455, 156 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xde469fbd99a05fe3), 481, 164 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa59bc234db398c25), 508, 172 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xf6c69a72a3989f5c), 534, 180 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xb7dcbf5354e9bece), 561, 188 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x88fcf317f22241e2), 588, 196 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xcc20ce9bd35c78a5), 614, 204 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x98165af37b2153df), 641, 212 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe2a0b5dc971f303a), 667, 220 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xa8d9d1535ce3b396), 694, 228 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xfb9b7cd9a4a7443c), 720, 236 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbb764c4ca7a44410), 747, 244 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8bab8eefb6409c1a), 774, 252 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd01fef10a657842c), 800, 260 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9b10a4e5e9913129), 827, 268 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xe7109bfba19c0c9d), 853, 276 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xac2820d9623bf429), 880, 284 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x80444b5e7aa7cf85), 907, 292 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xbf21e44003acdd2d), 933, 300 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x8e679c2f5e44ff8f), 960, 308 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xd433179d9c8cb841), 986, 316 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0x9e19db92b4e31ba9), 1013, 324 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xeb96bf6ebadf77d9), 1039, 332 }, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ULL(0xaf87023b9bf0ee6b), 1066, 340 } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ }; ~~ static int cached_pow(int exp, diy_fp *p) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int k = (int)ceil((exp+DIYFP_FRACT_SIZE-1) * D_1_LOG2_10); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int i = (k-MIN_CACHED_EXP-1) / CACHED_EXP_STEP + 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ p->f = pow_cache[i].fract; ~~~~~~~~~~~~~~~~~~~~~~~~~~ p->e = pow_cache[i].b_exp; ~~~~~~~~~~~~~~~~~~~~~~~~~~ return pow_cache[i].d_exp; ~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ static diy_fp minus(diy_fp x, diy_fp y) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ diy_fp d; d.f = x.f - y.f; d.e = x.e; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return d; ~~~~~~~~~ } ~ static diy_fp multiply(diy_fp x, diy_fp y) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t a, b, c, d, ac, bc, ad, bd, tmp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp r; ~~~~~~~~~ a = x.f >> 32; b = x.f & MASK32; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ c = y.f >> 32; d = y.f & MASK32; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ac = a*c; bc = b*c; ~~~~~~~~~~~~~~~~~~~ ad = a*d; bd = b*d; ~~~~~~~~~~~~~~~~~~~ tmp = (bd >> 32) + (ad & MASK32) + (bc & MASK32); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ tmp += 1U << 31; // round ~~~~~~~~~~~~~~~~~~~~~~~~~ r.f = ac + (ad >> 32) + (bc >> 32) + (tmp >> 32); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ r.e = x.e + y.e + 64; ~~~~~~~~~~~~~~~~~~~~~ return r; ~~~~~~~~~ } ~ static diy_fp normalize_diy_fp(diy_fp n) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ while(!(n.f & ULL(0xFFC0000000000000))) { n.f <<= 10; n.e -= 10; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ while(!(n.f & D64_SIGN)) { n.f <<= 1; --n.e; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return n; ~~~~~~~~~ } ~ static diy_fp double2diy_fp(double d) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ diy_fp fp; ~~~~~~~~~~ uint64_t u64 = CAST_U64(d); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(u64 & D64_EXP_MASK)) { fp.f = u64 & D64_FRACT_MASK; fp.e = 1 - D64_EXP_BIAS; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ else { fp.f = (u64 & D64_FRACT_MASK) + D64_IMPLICIT_ONE; fp.e = (int)((u64 & D64_EXP_MASK) >> D64_EXP_POS) - D64_EXP_BIAS; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return fp; ~~~~~~~~~~ } ~ // pow10_cache[i] = 10^(i-1) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static const unsigned int pow10_cache[] = { 0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ static int largest_pow10(uint32_t n, int n_bits, uint32_t *power) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int guess = ((n_bits + 1) * 1233 >> 12) + 1/*skip first entry*/; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (n < pow10_cache[guess]) --guess; // We don't have any guarantees that 2^n_bits <= n. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *power = pow10_cache[guess]; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return guess; ~~~~~~~~~~~~~ } ~ static int round_weed(char *buffer, int len, uint64_t wp_W, uint64_t delta, uint64_t rest, uint64_t ten_kappa, uint64_t ulp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t wp_Wup = wp_W - ulp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t wp_Wdown = wp_W + ulp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ while(rest < wp_Wup && delta - rest >= ten_kappa ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ && (rest + ten_kappa < wp_Wup || wp_Wup - rest >= rest + ten_kappa - wp_Wup)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ --buffer[len-1]; ~~~~~~~~~~~~~~~~ rest += ten_kappa; ~~~~~~~~~~~~~~~~~~ } ~ if (rest < wp_Wdown && delta - rest >= ten_kappa ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ && (rest + ten_kappa < wp_Wdown || wp_Wdown - rest > rest + ten_kappa - wp_Wdown)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ return 0; ~~~~~~~~~ return 2*ulp <= rest && rest <= delta - 4*ulp; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ static int digit_gen(diy_fp low, diy_fp w, diy_fp high, char *buffer, int *length, int *kappa) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ uint64_t unit = 1; ~~~~~~~~~~~~~~~~~~ diy_fp too_low = { low.f - unit, low.e }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp too_high = { high.f + unit, high.e }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp unsafe_interval = minus(too_high, too_low); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp one = { ULL(1) << -w.e, w.e }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint32_t p1 = (uint32_t)(too_high.f >> -one.e); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t p2 = too_high.f & (one.f - 1); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint32_t div; ~~~~~~~~~~~~~ *kappa = largest_pow10(p1, DIYFP_FRACT_SIZE + one.e, &div); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *length = 0; ~~~~~~~~~~~~ while(*kappa > 0) ~~~~~~~~~~~~~~~~~ { ~ uint64_t rest; ~~~~~~~~~~~~~~ int digit = p1 / div; ~~~~~~~~~~~~~~~~~~~~~ buffer[*length] = (char)('0' + digit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++*length; ~~~~~~~~~~ p1 %= div; ~~~~~~~~~~ --*kappa; ~~~~~~~~~ rest = ((uint64_t)p1 << -one.e) + p2; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (rest < unsafe_interval.f) return round_weed(buffer, *length, minus(too_high, w).f, unsafe_interval.f, rest, (uint64_t)div << -one.e, unit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ div /= 10; ~~~~~~~~~~ } ~ for(;;) ~~~~~~~ { ~ int digit; ~~~~~~~~~~ p2 *= 10; ~~~~~~~~~ unit *= 10; ~~~~~~~~~~~ unsafe_interval.f *= 10; ~~~~~~~~~~~~~~~~~~~~~~~~ // Integer division by one. ~~~~~~~~~~~~~~~~~~~~~~~~~~~ digit = (int)(p2 >> -one.e); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ buffer[*length] = (char)('0' + digit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ++*length; ~~~~~~~~~~ p2 &= one.f - 1; // Modulo by one. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ --*kappa; ~~~~~~~~~ if (p2 < unsafe_interval.f) return round_weed(buffer, *length, minus(too_high, w).f * unit, unsafe_interval.f, p2, one.f, unit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ } ~ } ~ static int grisu3(double v, char *buffer, int *length, int *d_exp) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int mk, kappa, success; ~~~~~~~~~~~~~~~~~~~~~~~ diy_fp dfp = double2diy_fp(v); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp w = normalize_diy_fp(dfp); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // normalize boundaries ~~~~~~~~~~~~~~~~~~~~~~~ diy_fp t = { (dfp.f << 1) + 1, dfp.e - 1 }; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp b_plus = normalize_diy_fp(t); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diy_fp b_minus; ~~~~~~~~~~~~~~~ diy_fp c_mk; // Cached power of ten: 10^-k ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t u64 = CAST_U64(v); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (!(u64 & D64_FRACT_MASK) && (u64 & D64_EXP_MASK) != 0) { b_minus.f = (dfp.f << 2) - 1; b_minus.e = dfp.e - 2;} // lower boundary is closer? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ else { b_minus.f = (dfp.f << 1) - 1; b_minus.e = dfp.e - 1; } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ b_minus.f = b_minus.f << (b_minus.e - b_plus.e); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ b_minus.e = b_plus.e; ~~~~~~~~~~~~~~~~~~~~~ mk = cached_pow(MIN_TARGET_EXP - DIYFP_FRACT_SIZE - w.e, &c_mk); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ w = multiply(w, c_mk); ~~~~~~~~~~~~~~~~~~~~~~ b_minus = multiply(b_minus, c_mk); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ b_plus = multiply(b_plus, c_mk); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ success = digit_gen(b_minus, w, b_plus, buffer, length, &kappa); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *d_exp = kappa - mk; ~~~~~~~~~~~~~~~~~~~~ return success; ~~~~~~~~~~~~~~~ } ~ static int i_to_str(int val, char *str) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ int len, i; ~~~~~~~~~~~ char *s; ~~~~~~~~ char *begin = str; ~~~~~~~~~~~~~~~~~~ if (val < 0) { ~~~~~~~~~~~~~~ *str++ = '-'; ~~~~~~~~~~~~~ if (val > -10) ~~~~~~~~~~~~~~ *str++ = '0'; ~~~~~~~~~~~~~ val = -val; ~~~~~~~~~~~ } ~ else ~~~~ *str++ = '+'; ~~~~~~~~~~~~~ s = str; ~~~~~~~~ for(;;) ~~~~~~~ { ~ int ni = val / 10; ~~~~~~~~~~~~~~~~~~ int digit = val - ni*10; ~~~~~~~~~~~~~~~~~~~~~~~~ *s++ = (char)('0' + digit); ~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (ni == 0) ~~~~~~~~~~~~ break; ~~~~~~ val = ni; ~~~~~~~~~ } ~ *s = '\0'; ~~~~~~~~~~ len = (int)(s - str); ~~~~~~~~~~~~~~~~~~~~~ for(i = 0; i < len/2; ++i) ~~~~~~~~~~~~~~~~~~~~~~~~~~ { ~ char ch = str[i]; ~~~~~~~~~~~~~~~~~ str[i] = str[len-1-i]; ~~~~~~~~~~~~~~~~~~~~~~ str[len-1-i] = ch; ~~~~~~~~~~~~~~~~~~ } ~ return (int)(s - begin); ~~~~~~~~~~~~~~~~~~~~~~~~ } ~ int dtoa_grisu3(double v, char *dst, int size) { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ int d_exp, len, success, i, decimal_pos; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ uint64_t u64 = CAST_U64(v); ~~~~~~~~~~~~~~~~~~~~~~~~~ src/math/grisu.c:330:24: note: in expansion of macro 'CAST_U64' uint64_t u64 = CAST_U64(v); ^~~~~~~~ compiling src/core/dll.o compiling src/core/ext.o In file included from src/moar.h:178, from src/core/ops.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/ops.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/core/nativecall.o In file included from src/moar.h:100, from src/core/coerce.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/coerce.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/core/nativecall_libffi.o In file included from src/moar.h:100, from src/core/dll.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/dll.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/core/continuation.o In file included from src/moar.h:100, from src/core/ext.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/ext.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/core/intcache.o In file included from src/moar.h:178, from src/core/coerce.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/coerce.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/core/dll.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/dll.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/core/ext.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/ext.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/nativecall_libffi.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/nativecall_libffi.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/core/nativecall.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/nativecall.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/core/fixedsizealloc.o src/core/nativecall_libffi.c: In function 'unmarshal_callback': src/core/nativecall_libffi.c:114:20: warning: variable 'status' set but not used [-Wunused-but-set-variable] ffi_status status; ^~~~~~ src/core/nativecall_libffi.c: In function 'callback_handler': src/core/nativecall_libffi.c:215:22: warning: unused variable 'values' [-Wunused-variable] void **values = MVM_malloc(sizeof(void *) * (data->cs->arg_count ? data->cs->arg_count : 1)); ^~~~~~ src/core/nativecall_libffi.c: In function 'MVM_nativecall_invoke': src/core/nativecall_libffi.c:503:16: warning: unused variable 'status' [-Wunused-variable] ffi_status status = ffi_prep_cif(&cif, body->convention, (unsigned int)num_args, body->ffi_ret_type, body->ffi_arg_types); ^~~~~~ compiling src/core/regionalloc.o In file included from src/moar.h:178, from src/core/nativecall_libffi.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/nativecall_libffi.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/continuation.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/continuation.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/nativecall.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/nativecall.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/core/intcache.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/intcache.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/intcache.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/intcache.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/core/continuation.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/continuation.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/debug/debugserver.o compiling src/gen/config.o In file included from src/moar.h:100, from src/core/fixedsizealloc.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/fixedsizealloc.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/gc/orchestrate.o In file included from src/moar.h:178, from src/core/fixedsizealloc.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/fixedsizealloc.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/gc/allocation.o In file included from src/moar.h:100, from src/core/regionalloc.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/core/regionalloc.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/core/regionalloc.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/core/regionalloc.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/gc/orchestrate.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gc/orchestrate.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/gc/worklist.o In file included from src/moar.h:100, from src/gen/config.c:9: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gen/config.c:9: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/debug/debugserver.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': compiling src/gc/roots.o src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ src/gc/orchestrate.c: In function 'MVM_gc_enter_from_allocator': src/gc/orchestrate.c:434:20: warning: unused variable 'last_starter' [-Wunused-variable] MVMThread *last_starter = NULL; ^~~~~~~~~~~~ src/gc/orchestrate.c: In function 'MVM_gc_enter_from_interrupt': src/gc/orchestrate.c:560:10: warning: unused variable 'curr' [-Wunused-variable] AO_t curr; ^~~~ In file included from src/moar.h:101, from src/debug/debugserver.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/gc/orchestrate.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/orchestrate.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/gen/config.c:9: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gen/config.c:9: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/gc/collect.o In file included from src/moar.h:100, from src/gc/worklist.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ compiling src/gc/gen2.o In file included from src/moar.h:101, from src/gc/worklist.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/gc/roots.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gc/roots.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/debug/debugserver.c: In function 'send_thread_info': src/debug/debugserver.c:884:10: warning: unused variable 'infobuf' [-Wunused-variable] char infobuf[32] = "THL"; ^~~~~~~ src/debug/debugserver.c: In function 'request_object_attributes': In file included from src/moar.h:100, from src/gc/allocation.c:6: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ src/debug/debugserver.c:1560:26: warning: unused variable 'i' [-Wunused-variable] MVMint16 i; ^ In file included from src/moar.h:101, from src/gc/allocation.c:6: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/debug/debugserver.c: In function 'request_object_metadata': src/debug/debugserver.c:1742:18: warning: unused variable 'vm' [-Wunused-variable] MVMInstance *vm = dtc->instance; ^~ src/debug/debugserver.c: In function 'request_object_positionals': src/debug/debugserver.c:2068:14: warning: unused variable 'slots' [-Wunused-variable] MVMint64 slots; ^~~~~ In file included from src/moar.h:178, from src/gc/worklist.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/worklist.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/debug/debugserver.c: In function 'socket_writer': src/debug/debugserver.c:2246:15: warning: unused variable 'orig_data' [-Wunused-variable] MVMuint8 *orig_data = (MVMuint8 *)data; ^~~~~~~~~ compiling src/gc/wb.o src/debug/debugserver.c:2243:12: warning: unused variable 'idx' [-Wunused-variable] size_t idx; ^~~ src/debug/debugserver.c: In function 'debugserver_worker': src/debug/debugserver.c:2574:13: warning: unused variable 'error' [-Wunused-variable] int error; ^~~~~ src/debug/debugserver.c:2614:15: warning: unused variable 'buffer' [-Wunused-variable] char *buffer[32]; ^~~~~~ src/debug/debugserver.c:2613:13: warning: unused variable 'len' [-Wunused-variable] int len; ^~~ src/debug/debugserver.c:2560:14: warning: unused variable 'command_serial' [-Wunused-variable] MVMint32 command_serial; ^~~~~~~~~~~~~~ src/debug/debugserver.c: In function 'MVM_debugserver_init': In file included from src/moar.h:178, from src/gc/roots.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/roots.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/debug/debugserver.c:2788:9: warning: unused variable 'threadCreateError' [-Wunused-variable] int threadCreateError; ^~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/gc/allocation.c:6: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/allocation.c:6: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/debug/debugserver.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/debug/debugserver.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/gc/collect.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gc/collect.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/gc/objectid.o In file included from src/moar.h:100, from src/gc/gen2.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ compiling src/gc/finalize.o In file included from src/moar.h:101, from src/gc/gen2.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/gc/debug.o In file included from src/moar.h:178, from src/gc/collect.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/collect.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/gc/wb.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gc/wb.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/gc/gen2.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/gen2.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/io/io.o In file included from src/moar.h:178, from src/gc/wb.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/wb.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/io/eventloop.o In file included from src/moar.h:100, from src/gc/objectid.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gc/objectid.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/io/syncfile.o In file included from src/moar.h:100, from src/gc/finalize.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gc/finalize.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/gc/objectid.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/objectid.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/gc/debug.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/gc/debug.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/gc/finalize.c:1: At top level: In file included from src/moar.h:100, from src/io/io.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/io.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/finalize.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/gc/debug.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/gc/debug.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/io/syncsocket.o compiling src/io/fileops.o In file included from src/moar.h:178, from src/io/io.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/io.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/io/eventloop.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/eventloop.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/io/syncfile.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/syncfile.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/io/dirops.o In file included from src/moar.h:178, from src/io/eventloop.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/eventloop.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/io/syncfile.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/syncfile.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/io/fileops.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/fileops.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/io/syncsocket.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/syncsocket.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/io/procops.o In file included from src/moar.h:100, from src/io/dirops.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/dirops.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/io/timers.o In file included from src/moar.h:178, from src/io/syncsocket.c:1: At top level: In file included from src/moar.h:178, from src/io/fileops.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/fileops.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/syncsocket.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/io/dirops.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/dirops.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/io/syncsocket.c: In function 'socket_read_bytes': src/io/syncsocket.c:94:38: warning: 'use_last_packet_end' may be used uninitialized in this function [-Wmaybe-uninitialized] MVMuint16 use_last_packet_start, use_last_packet_end; ^~~~~~~~~~~~~~~~~~~ src/io/syncsocket.c:94:15: warning: 'use_last_packet_start' may be used uninitialized in this function [-Wmaybe-uninitialized] MVMuint16 use_last_packet_start, use_last_packet_end; ^~~~~~~~~~~~~~~~~~~~~ compiling src/io/filewatchers.o compiling src/io/signals.o In file included from src/moar.h:100, from src/io/timers.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ compiling src/io/asyncsocket.o In file included from src/moar.h:101, from src/io/timers.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/io/procops.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/procops.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/io/asyncsocketudp.o compiling src/6model/reprs.o In file included from src/moar.h:178, from src/io/timers.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/timers.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/io/procops.c:5: At top level: src/bithacks.h:10:12: warning: 'MVM_bithacks_is_pow2z' defined but not used [-Wunused-function] static int MVM_bithacks_is_pow2z(MVMuint64 value) ^~~~~~~~~~~~~~~~~~~~~ src/bithacks.h:1:18: warning: 'MVM_bithacks_count_bits' defined but not used [-Wunused-function] static MVMuint32 MVM_bithacks_count_bits(MVMuint64 value) { ^~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/io/procops.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/procops.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/io/filewatchers.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/filewatchers.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/io/signals.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/signals.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/io/filewatchers.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprconv.o In file included from src/moar.h:101, from src/io/filewatchers.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/io/asyncsocketudp.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/asyncsocketudp.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/containers.o In file included from src/moar.h:100, from src/io/asyncsocket.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': In file included from src/moar.h:178, from src/6model/reprs.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ At top level: src/io/signals.c:112:3: warning: 'MVM_sig_names' defined but not used [-Wunused-variable] } MVM_sig_names; ^~~~~~~~~~~~~ In file included from src/moar.h:178, from src/io/signals.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/signals.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/io/asyncsocketudp.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/asyncsocketudp.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/io/asyncsocket.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/io/procops.c: In function 'write_setup': src/io/procops.c:277:27: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized] ? uv_strerror(r) ^~~~~~~~~~~ In file included from src/moar.h:178, from src/io/asyncsocket.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/io/asyncsocket.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/parametric.o In file included from src/moar.h:100, from src/6model/reprconv.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprconv.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/MVMString.o In file included from src/moar.h:178, from src/6model/reprconv.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprconv.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/containers.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/containers.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/containers.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/VMArray.o In file included from src/moar.h:101, from src/6model/containers.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/parametric.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/parametric.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/MVMHash.o In file included from src/moar.h:100, from src/6model/reprs/MVMString.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMString.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/parametric.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/parametric.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMString.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMString.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/MVMCFunction.o compiling src/6model/reprs/KnowHOWREPR.o In file included from src/moar.h:100, from src/6model/reprs/VMArray.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/VMArray.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMHash.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMHash.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/KnowHOWAttributeREPR.o In file included from src/moar.h:100, from src/6model/reprs/MVMHash.c:1: src/6model/reprs/MVMHash.c: In function 'MVMHash_gc_mark': src/gc/worklist.h:91:23: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] if (*item && !( (*(MVMCollectable**)item)->flags & MVM_CF_SECOND_GEN)) { \ src/strings/uthash.h:754:17: note: in definition of macro 'HASH_ITER_FAST' code\ ^~~~~ }\ src/6model/reprs/MVMHash.c:57:13: note: in expansion of macro 'MVM_gc_worklist_add_no_include_gen2_nocheck' MVM_gc_worklist_add_no_include_gen2_nocheck(tc, worklist, ¤t->value); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/VMArray.c:1: At top level: compiling src/6model/reprs/P6str.o src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMHash.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMHash.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/KnowHOWREPR.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/KnowHOWREPR.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/KnowHOWAttributeREPR.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/KnowHOWAttributeREPR.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/KnowHOWREPR.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/KnowHOWREPR.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/KnowHOWAttributeREPR.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/KnowHOWAttributeREPR.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/P6str.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMCFunction.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/P6str.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCFunction.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/P6opaque.o In file included from src/moar.h:178, from src/6model/reprs/MVMCFunction.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCFunction.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/MVMCode.o In file included from src/moar.h:178, from src/6model/reprs/P6str.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/P6str.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/MVMOSHandle.o compiling src/6model/reprs/MVMCompUnit.o compiling src/6model/reprs/MVMStaticFrame.o compiling src/6model/reprs/P6int.o compiling src/6model/reprs/P6num.o compiling src/6model/reprs/Uninstantiable.o In file included from src/moar.h:100, from src/6model/reprs/P6opaque.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/P6opaque.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMOSHandle.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMOSHandle.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMCode.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMStaticFrame.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCode.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMStaticFrame.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMOSHandle.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMOSHandle.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/P6opaque.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/P6opaque.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMCompUnit.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/6model/reprs/MVMStaticFrame.c: In function 'copy_to': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ src/6model/reprs/MVMStaticFrame.c:63:39: warning: unused variable 'tmp' [-Wunused-variable] MVMLexicalRegistry *current, *tmp; ^~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCompUnit.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': In file included from src/moar.h:178, from src/6model/reprs/MVMCode.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCode.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/6model/reprs.h:4, from src/moar.h:128, from src/6model/reprs/MVMStaticFrame.c:1: src/6model/reprs/MVMStaticFrame.c: In function 'gc_free': src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/6model/reprs/MVMStaticFrame.c:176:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(tc, hash_handle, MVMLexicalRegistry, body->lexical_names); ^~~~~~~~~~~~~~~~ src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMStaticFrame.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMStaticFrame.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/P6int.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/P6int.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/HashAttrStore.o In file included from src/moar.h:178, from src/6model/reprs/MVMCompUnit.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCompUnit.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/P6int.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/P6int.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/P6num.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/P6num.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/Uninstantiable.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/Uninstantiable.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/Uninstantiable.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/Uninstantiable.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/MVMThread.o In file included from src/moar.h:100, from src/6model/reprs/HashAttrStore.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': compiling src/6model/reprs/MVMIter.o src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:178, from src/6model/reprs/P6num.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/P6num.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/HashAttrStore.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/MVMContext.o compiling src/6model/reprs/SCRef.o In file included from src/6model/reprs.h:4, from src/moar.h:128, from src/6model/reprs/HashAttrStore.c:1: src/6model/reprs/HashAttrStore.c: In function 'gc_free': src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/6model/reprs/HashAttrStore.c:48:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(tc, hash_handle, MVMHashEntry, h->body.hash_head); ^~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/HashAttrStore.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/HashAttrStore.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/MVMCallCapture.o compiling src/6model/reprs/P6bigint.o compiling src/6model/reprs/NFA.o In file included from src/moar.h:100, from src/6model/reprs/MVMThread.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMThread.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMContext.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMContext.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMIter.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': compiling src/6model/reprs/MVMException.o src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMIter.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/SCRef.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/SCRef.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMThread.c:1: At top level: src/6model/reprs/MVMContext.c: In function 'bind_key': src/6model/reprs/MVMContext.c:126:21: warning: unused variable 'frame' [-Wunused-variable] MVMFrame *frame = body->context; ^~~~~ src/6model/reprs/MVMContext.c: In function 'exists_key': src/6model/reprs/MVMContext.c:178:15: warning: unused variable 'frame' [-Wunused-variable] MVMFrame *frame = body->context; ^~~~~ src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMThread.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMContext.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMContext.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMCallCapture.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCallCapture.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMIter.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMIter.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/SCRef.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/SCRef.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/P6bigint.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': compiling src/6model/reprs/MVMDLLSym.o src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/P6bigint.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMCallCapture.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMCallCapture.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMException.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMException.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/NFA.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:178, from src/6model/reprs/P6bigint.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/P6bigint.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/NFA.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/MVMMultiCache.o In file included from src/moar.h:178, from src/6model/reprs/MVMException.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMException.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/MVMContinuation.o In file included from src/moar.h:178, from src/6model/reprs/NFA.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/NFA.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/NativeCall.o In file included from src/moar.h:100, from src/6model/reprs/MVMDLLSym.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMDLLSym.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/CPointer.o In file included from src/moar.h:178, from src/6model/reprs/MVMDLLSym.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMDLLSym.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMContinuation.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMContinuation.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/CStr.o In file included from src/moar.h:100, from src/6model/reprs/MVMMultiCache.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMMultiCache.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMContinuation.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMContinuation.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/NativeCall.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ compiling src/6model/reprs/CArray.o In file included from src/moar.h:101, from src/6model/reprs/NativeCall.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/CStruct.o In file included from src/moar.h:178, from src/6model/reprs/MVMMultiCache.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMMultiCache.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/CUnion.o In file included from src/moar.h:100, from src/6model/reprs/CPointer.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/CPointer.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/NativeCall.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/NativeCall.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/CPointer.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/CPointer.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/ReentrantMutex.o compiling src/6model/reprs/ConditionVariable.o In file included from src/moar.h:100, from src/6model/reprs/CStruct.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/CStruct.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/CArray.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/CArray.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/CStr.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/CStr.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/CUnion.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/CUnion.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/6model/reprs/CStruct.c: In function 'get_attribute': src/6model/reprs/CStruct.c:477:37: warning: unused variable 'child_objs' [-Wunused-variable] MVMObject **child_objs = body->child_objs; ^~~~~~~~~~ compiling src/6model/reprs/Semaphore.o In file included from src/moar.h:178, from src/6model/reprs/CStruct.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/CArray.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/CArray.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/6model/reprs/CUnion.c: In function 'copy_to': src/6model/reprs/CUnion.c:369:20: warning: unused variable 'dest_body' [-Wunused-variable] MVMCUnionBody *dest_body = (MVMCUnionBody *)dest; ^~~~~~~~~ src/6model/reprs/CUnion.c:368:20: warning: unused variable 'src_body' [-Wunused-variable] MVMCUnionBody *src_body = (MVMCUnionBody *)src; ^~~~~~~~ src/6model/reprs/CUnion.c:367:25: warning: unused variable 'repr_data' [-Wunused-variable] MVMCUnionREPRData * repr_data = (MVMCUnionREPRData *) st->REPR_data; ^~~~~~~~~ src/6model/reprs/CUnion.c: In function 'get_attribute': src/6model/reprs/CUnion.c:433:41: warning: unused variable 'child_objs' [-Wunused-variable] MVMObject **child_objs = body->child_objs; ^~~~~~~~~~ At top level: src/6model/reprs/CUnion.c:282:13: warning: 'set_num_at_offset' defined but not used [-Wunused-function] static void set_num_at_offset(void *data, MVMint32 offset, MVMnum32 value) { ^~~~~~~~~~~~~~~~~ compiling src/6model/reprs/ConcBlockingQueue.o src/6model/reprs/CUnion.c:276:17: warning: 'get_num_at_offset' defined but not used [-Wunused-function] static MVMnum32 get_num_at_offset(void *data, MVMint32 offset) { ^~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/CStr.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/CStr.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/6model/reprs/CUnion.c:270:13: warning: 'set_int_at_offset' defined but not used [-Wunused-function] static void set_int_at_offset(void *data, MVMint32 offset, MVMint32 value) { ^~~~~~~~~~~~~~~~~ src/6model/reprs/CUnion.c:264:17: warning: 'get_int_at_offset' defined but not used [-Wunused-function] static MVMint32 get_int_at_offset(void *data, MVMint32 offset) { ^~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/CUnion.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/CUnion.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/ReentrantMutex.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/ReentrantMutex.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/ConditionVariable.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/ConditionVariable.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/6model/reprs/ReentrantMutex.c: In function 'MVM_reentrantmutex_lock': src/6model/reprs/ReentrantMutex.c:127:18: warning: unused variable 'interval_id' [-Wunused-variable] unsigned int interval_id; ^~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/ReentrantMutex.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/ReentrantMutex.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/ConditionVariable.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/ConditionVariable.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/6model/reprs/MVMAsyncTask.o compiling src/6model/reprs/MVMNull.o compiling src/6model/reprs/CPPStruct.o In file included from src/moar.h:100, from src/6model/reprs/ConcBlockingQueue.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': compiling src/6model/reprs/NativeRef.o src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/ConcBlockingQueue.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/6model/reprs/ConcBlockingQueue.c: In function 'unshift': src/6model/reprs/ConcBlockingQueue.c:188:10: warning: unused variable 'orig_elems' [-Wunused-variable] AO_t orig_elems; ^~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/Semaphore.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': In file included from src/moar.h:178, from src/6model/reprs/ConcBlockingQueue.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/ConcBlockingQueue.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMNull.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/Semaphore.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': In file included from src/moar.h:101, from src/6model/reprs/MVMNull.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMAsyncTask.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMAsyncTask.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/MultiDimArray.o In file included from src/moar.h:178, from src/6model/reprs/MVMNull.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMNull.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/Semaphore.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/Semaphore.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/CPPStruct.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/CPPStruct.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/reprs/Decoder.o In file included from src/moar.h:178, from src/6model/reprs/MVMAsyncTask.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMAsyncTask.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/6model/reprs/CPPStruct.c: In function 'get_attribute': src/6model/reprs/CPPStruct.c:467:37: warning: unused variable 'child_objs' [-Wunused-variable] MVMObject **child_objs = body->child_objs; ^~~~~~~~~~ compiling src/6model/reprs/MVMSpeshLog.o In file included from src/moar.h:178, from src/6model/reprs/CPPStruct.c:1: At top level: compiling src/6model/reprs/MVMStaticFrameSpesh.o compiling src/6model/6model.o compiling src/6model/bootstrap.o compiling src/6model/sc.o src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/CPPStruct.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/NativeRef.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/NativeRef.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MultiDimArray.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MultiDimArray.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/6model/reprs/NativeRef.c: In function 'spesh': src/6model/reprs/NativeRef.c:146:28: warning: unused variable 'opcode' [-Wunused-variable] MVMuint16 opcode = ins->info->opcode; ^~~~~~ In file included from src/moar.h:100, from src/6model/reprs/Decoder.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/Decoder.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/NativeRef.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/NativeRef.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/MultiDimArray.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MultiDimArray.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/Decoder.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/Decoder.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMStaticFrameSpesh.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMStaticFrameSpesh.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/bootstrap.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:100, from src/6model/6model.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/bootstrap.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/6model/serialization.o In file included from src/moar.h:101, from src/6model/6model.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/reprs/MVMSpeshLog.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMSpeshLog.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/6model/sc.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/sc.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMStaticFrameSpesh.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMStaticFrameSpesh.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/6model/bootstrap.c: In function 'attributes': src/6model/bootstrap.c:224:23: warning: variable 'type_obj' set but not used [-Wunused-but-set-variable] MVMObject *self, *type_obj, *member; \ ^~~~~~~~ src/6model/bootstrap.c:238:1: note: in expansion of macro 'introspect_member' introspect_member(attributes, MVM_args_set_result_obj, attributes) ^~~~~~~~~~~~~~~~~ src/6model/bootstrap.c: In function 'methods': src/6model/bootstrap.c:224:23: warning: variable 'type_obj' set but not used [-Wunused-but-set-variable] MVMObject *self, *type_obj, *member; \ ^~~~~~~~ src/6model/bootstrap.c:241:1: note: in expansion of macro 'introspect_member' introspect_member(methods, MVM_args_set_result_obj, methods) ^~~~~~~~~~~~~~~~~ src/6model/bootstrap.c: In function 'name': src/6model/bootstrap.c:224:23: warning: variable 'type_obj' set but not used [-Wunused-but-set-variable] MVMObject *self, *type_obj, *member; \ ^~~~~~~~ src/6model/bootstrap.c:244:1: note: in expansion of macro 'introspect_member' introspect_member(name, MVM_args_set_result_str, (MVMString *)name) ^~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/6model.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/6model.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/reprs/MVMSpeshLog.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/reprs/MVMSpeshLog.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/bootstrap.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/bootstrap.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/6model/sc.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/6model/sc.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/spesh/dump.o In file included from src/moar.h:100, from src/6model/serialization.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/6model/serialization.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/spesh/graph.o compiling src/spesh/codegen.o src/6model/serialization.c: In function 'concatenate_outputs': src/6model/serialization.c:904:13: warning: unused variable 'i' [-Wunused-variable] int i = 0; ^ compiling src/spesh/candidate.o compiling src/spesh/manipulate.o compiling src/spesh/args.o In file included from src/moar.h:178, from src/6model/serialization.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/dump.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/dump.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ At top level: src/spesh/dump.c:25:13: warning: 'rewind_ds' defined but not used [-Wunused-function] static void rewind_ds(DumpStr *ds, size_t target) { ^~~~~~~~~ src/spesh/dump.c:21:15: warning: 'tell_ds' defined but not used [-Wunused-function] static size_t tell_ds(DumpStr *ds) { ^~~~~~~ In file included from src/moar.h:178, from src/spesh/dump.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/dump.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/args.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/args.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/graph.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/graph.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/codegen.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:178, from src/spesh/args.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/args.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/codegen.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/spesh/graph.c: In function 'build_cfg': src/spesh/graph.c:176:18: warning: unused variable 'lineno_ann_offs' [-Wunused-variable] MVMuint32 lineno_ann_offs = 0; ^~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/candidate.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/candidate.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/spesh/graph.c:1: At top level: In file included from src/moar.h:100, from src/spesh/manipulate.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/manipulate.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:101, from src/spesh/graph.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/codegen.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/codegen.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/spesh/usages.o In file included from src/moar.h:178, from src/spesh/manipulate.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/manipulate.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/candidate.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/candidate.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/spesh/candidate.c: In function 'MVM_spesh_candidate_add': src/spesh/candidate.c:141:61: warning: 'jit_time' may be used uninitialized in this function [-Wmaybe-uninitialized] candidate->jitcode ? "" : "not ", (end_time - jit_time) / 1000); ~~~~~~~~~~^~~~~~~~~~~ src/spesh/candidate.c:135:25: warning: 'spesh_time' may be used uninitialized in this function [-Wmaybe-uninitialized] (spesh_time - start_time) / 1000, ~~~~~~~~~~~~^~~~~~~~~~~~~ src/spesh/candidate.c:136:23: warning: 'start_time' may be used uninitialized in this function [-Wmaybe-uninitialized] (end_time - start_time) / 1000); ~~~~~~~~~~^~~~~~~~~~~~~ src/spesh/dump.c: In function 'MVM_spesh_dump': src/spesh/dump.c:174:21: warning: 'line_number' may be used uninitialized in this function [-Wmaybe-uninitialized] appendf(ds, " [Annotation: INS Deopt OSR (idx %d -> pc %d); line %d]\n", ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ann->data.deopt_idx, g->deopt_addrs[2 * ann->data.deopt_idx], line_number); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/spesh/dump.c:119:19: note: 'line_number' was declared here MVMuint32 line_number; ^~~~~~~~~~~ compiling src/spesh/facts.o In file included from src/moar.h:100, from src/spesh/usages.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/usages.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/spesh/optimize.o In file included from src/moar.h:178, from src/spesh/usages.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/usages.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/spesh/dead_bb_elimination.o In file included from src/moar.h:100, from src/spesh/facts.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/facts.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/spesh/dead_ins_elimination.o src/spesh/facts.c: In function 'wvalfrom_facts': src/spesh/facts.c:130:16: warning: unused variable 'target' [-Wunused-variable] MVMObject *target = MVM_sc_get_object(tc, sc, idx); ^~~~~~ src/spesh/facts.c: In function 'sp_guard_facts': src/spesh/facts.c:245:20: warning: unused variable 'srcfacts' [-Wunused-variable] MVMSpeshFacts *srcfacts = &g->facts[ins->operands[1].reg.orig][ins->operands[1].reg.i]; ^~~~~~~~ src/spesh/facts.c: In function 'add_bb_facts': src/spesh/facts.c:497:32: warning: unused variable 'target_facts' [-Wunused-variable] MVMSpeshFacts *target_facts = &(g->facts[ins->operands[0].reg.orig][ins->operands[0].reg.i]); ^~~~~~~~~~~~ src/spesh/facts.c:434:17: warning: unused variable 'is_phi' [-Wunused-variable] MVMint32 i, is_phi; ^~~~~~ At top level: src/spesh/facts.c:213:13: warning: 'coerce_iu_facts' defined but not used [-Wunused-function] static void coerce_iu_facts(MVMThreadContext *tc, MVMSpeshGraph *g, MVMSpeshIns *ins) { ^~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/facts.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/facts.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/spesh/deopt.o In file included from src/moar.h:100, from src/spesh/optimize.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/optimize.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/dead_ins_elimination.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/dead_ins_elimination.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/spesh/log.o In file included from src/moar.h:178, from src/spesh/dead_ins_elimination.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/dead_ins_elimination.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/spesh/optimize.c: In function 'optimize_decont': src/spesh/optimize.c:675:37: warning: unused variable 'orig_src' [-Wunused-variable] MVMSpeshOperand orig_src = ins->operands[1]; ^~~~~~~~ src/spesh/optimize.c: In function 'insert_arg_decont_type_guard': src/spesh/optimize.c:1629:21: warning: unused variable 'throwaway' [-Wunused-variable] MVMSpeshOperand throwaway; ^~~~~~~~~ src/spesh/optimize.c: In function 'optimize_prof_allocated': src/spesh/optimize.c:2260:20: warning: unused variable 'logee_facts' [-Wunused-variable] MVMSpeshFacts *logee_facts = MVM_spesh_get_facts(tc, g, ins->operands[0]); ^~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/dead_bb_elimination.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/dead_bb_elimination.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/spesh/threshold.o compiling src/spesh/inline.o In file included from src/moar.h:100, from src/spesh/deopt.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/deopt.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/spesh/dead_bb_elimination.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/dead_bb_elimination.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/optimize.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/optimize.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/spesh/osr.o compiling src/spesh/lookup.o In file included from src/moar.h:178, from src/spesh/deopt.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/deopt.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/log.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/log.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/spesh/deopt.c: In function 'uninline': src/spesh/deopt.c:70:36: warning: 'last_return_deopt_idx' may be used uninitialized in this function [-Wmaybe-uninitialized] cand->deopts[2 * last_return_deopt_idx]; ~~^~~~~~~~~~~~~~~~~~~~~~~ src/spesh/deopt.c:74:20: warning: 'last_res_type' may be used uninitialized in this function [-Wmaybe-uninitialized] if (last_res_type == MVM_RETURN_VOID) ^ src/spesh/deopt.c:77:49: warning: 'last_res_reg' may be used uninitialized in this function [-Wmaybe-uninitialized] uf->return_value = uf->work + last_res_reg; ^ In file included from src/moar.h:178, from src/spesh/log.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/log.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/spesh/iterator.o In file included from src/moar.h:100, from src/spesh/osr.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/osr.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/spesh/osr.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/osr.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/lookup.c:9: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/lookup.c:9: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/inline.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/inline.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/threshold.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/threshold.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/spesh/lookup.c:9: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/lookup.c:9: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/spesh/worker.o compiling src/spesh/debug.o In file included from src/moar.h:178, from src/spesh/threshold.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/threshold.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/inline.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/inline.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/iterator.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/iterator.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/spesh/stats.o compiling src/spesh/plan.o compiling src/spesh/arg_guard.o compiling src/spesh/plugin.o compiling src/spesh/frame_walker.o In file included from src/moar.h:178, from src/spesh/iterator.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/iterator.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/worker.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/worker.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/spesh/worker.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/worker.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/debug.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/debug.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/spesh/pea.o In file included from src/moar.h:100, from src/spesh/plugin.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ src/spesh/worker.c: In function 'worker': src/spesh/worker.c:29:40: warning: 'start_time' may be used uninitialized in this function [-Wmaybe-uninitialized] (int)((uv_hrtime() - start_time) / 1000)); ^ In file included from src/moar.h:101, from src/spesh/plugin.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/spesh/debug.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/debug.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/spesh/frame_walker.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/frame_walker.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/arg_guard.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/arg_guard.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/stats.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/stats.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/spesh/plan.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/plan.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/spesh/plugin.c: In function 'MVM_spesh_plugin_rewrite_resolve': src/spesh/plugin.c:669:19: warning: variable 'initial_arg_regs_length' set but not used [-Wunused-but-set-variable] MVMuint32 initial_arg_regs_length, arg_regs_length, i; ^~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/frame_walker.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/plugin.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/plugin.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/spesh/arg_guard.c: In function 'MVM_spesh_arg_guard_gc_mark': src/spesh/arg_guard.c:534: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] #pragma clang diagnostic push compiling src/strings/decode_stream.o src/spesh/arg_guard.c:535: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] #pragma clang diagnostic ignored "-Wswitch" src/spesh/arg_guard.c:542: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] #pragma clang diagnostic pop src/spesh/arg_guard.c:536:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_CALLSITE' not handled in switch [-Wswitch] switch (ag->nodes[i].op) { ^~~~~~ src/spesh/arg_guard.c:536:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_LOAD_ARG' not handled in switch [-Wswitch] src/spesh/arg_guard.c:536:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_DEREF_VALUE' not handled in switch [-Wswitch] src/spesh/arg_guard.c:536:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_DEREF_RW' not handled in switch [-Wswitch] src/spesh/arg_guard.c:536:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_CERTAIN_RESULT' not handled in switch [-Wswitch] src/spesh/arg_guard.c:536:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_RESULT' not handled in switch [-Wswitch] src/spesh/arg_guard.c: In function 'MVM_spesh_arg_guard_gc_describe': src/spesh/arg_guard.c:552: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] #pragma clang diagnostic push src/spesh/arg_guard.c:553: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] #pragma clang diagnostic ignored "-Wswitch" src/spesh/arg_guard.c:561: warning: ignoring #pragma clang diagnostic [-Wunknown-pragmas] #pragma clang diagnostic pop src/spesh/arg_guard.c:554:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_CALLSITE' not handled in switch [-Wswitch] switch (ag->nodes[i].op) { ^~~~~~ src/spesh/arg_guard.c:554:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_LOAD_ARG' not handled in switch [-Wswitch] src/spesh/arg_guard.c:554:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_DEREF_VALUE' not handled in switch [-Wswitch] src/spesh/arg_guard.c:554:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_DEREF_RW' not handled in switch [-Wswitch] src/spesh/arg_guard.c:554:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_CERTAIN_RESULT' not handled in switch [-Wswitch] src/spesh/arg_guard.c:554:13: warning: enumeration value 'MVM_SPESH_GUARD_OP_RESULT' not handled in switch [-Wswitch] In file included from src/moar.h:178, from src/spesh/arg_guard.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/arg_guard.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/plan.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/plan.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/spesh/stats.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/stats.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/strings/ascii.o In file included from src/moar.h:100, from src/spesh/pea.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/spesh/pea.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/strings/decode_stream.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/decode_stream.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/spesh/pea.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/spesh/pea.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/decode_stream.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/decode_stream.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/strings/ascii.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/ascii.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': compiling src/strings/parse_num.o src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/strings/ascii.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/ascii.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/strings/utf8.o compiling src/strings/utf8_c8.o In file included from src/moar.h:100, from src/strings/parse_num.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/parse_num.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/strings/ascii.c:1: src/strings/ascii.c: In function 'MVM_string_ascii_encode_substr': src/strings/iter.h:175:39: warning: 'ci.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/ascii.c:165:26: note: 'ci.next_strand' was declared here MVMCodepointIter ci; ^~ compiling src/strings/nfg.o In file included from src/moar.h:178, from src/strings/parse_num.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/parse_num.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/strings/utf8.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/utf8.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/strings/utf8_c8.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/utf8_c8.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/strings/ops.o In file included from src/moar.h:178, from src/strings/utf8.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/utf8.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ At top level: src/strings/utf8_c8.c:128:13: warning: 'ensure_buffer' defined but not used [-Wunused-function] static void ensure_buffer(MVMGrapheme32 **buffer, MVMint32 *bufsize, MVMint32 needed) { ^~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/utf8_c8.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/utf8_c8.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/strings/nfg.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ generating src/strings/unicode.c In file included from src/moar.h:101, from src/strings/nfg.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/strings/normalize.o compiling src/strings/latin1.o In file included from src/moar.h:178, from src/strings/decode_stream.c:1: src/strings/decode_stream.c: In function 'MVM_string_decode_stream_sep_from_strings': src/strings/iter.h:175:39: warning: 'gi.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/decode_stream.c:660:21: note: 'gi.next_strand' was declared here MVMGraphemeIter gi; ^~ In file included from src/moar.h:178, from src/strings/nfg.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/nfg.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/strings/utf16.o compiling src/strings/windows1252.o compiling src/strings/shiftjis.o src/strings/utf8_c8.c: In function 'MVM_string_utf8_c8_decode': src/strings/utf8_c8.c:384:28: warning: 'min_expected_codepoint' may be used uninitialized in this function [-Wmaybe-uninitialized] if (min_expected_codepoint <= state.cur_codepoint && in_range(state.cur_codepoint)) ^ In file included from src/moar.h:100, from src/strings/normalize.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/normalize.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/strings/ops.c:3: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/ops.c:3: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/strings/utf8_c8.c: In function 'MVM_string_utf8_c8_decodestream': src/strings/utf8_c8.c:523:32: warning: 'min_expected_codepoint' may be used uninitialized in this function [-Wmaybe-uninitialized] if (state.cur_codepoint >= min_expected_codepoint) ^ At top level: src/strings/normalize.c:515:17: warning: 'is_grapheme_extend' defined but not used [-Wunused-function] static MVMint32 is_grapheme_extend(MVMThreadContext *tc, MVMCodepoint cp) { ^~~~~~~~~~~~~~~~~~ src/strings/normalize.c:512:17: warning: 'maybe_hangul' defined but not used [-Wunused-function] static MVMint32 maybe_hangul(MVMCodepoint cp) { ^~~~~~~~~~~~ src/strings/normalize.c:337:17: warning: 'ccc_old' defined but not used [-Wunused-function] static MVMint64 ccc_old(MVMThreadContext *tc, MVMCodepoint cp) { ^~~~~~~ In file included from src/moar.h:178, from src/strings/normalize.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/normalize.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/strings/latin1.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/latin1.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/strings/ops.c: In function 'iterate_gi_into_string': src/strings/ops.c:245:9: warning: unused variable 'result_pos' [-Wunused-variable] int result_pos = 0; ^~~~~~~~~~ src/strings/utf8.c: In function 'MVM_string_utf8_decodestream': src/strings/utf8.c:508:5: warning: 'lag_last_accept_pos' may be used uninitialized in this function [-Wmaybe-uninitialized] MVM_string_decodestream_discard_to(tc, ds, last_accept_bytes, last_accept_pos); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/strings/ops.c: In function 'MVM_string_print': src/strings/ops.c:1101:18: warning: unused variable 'handle' [-Wunused-variable] MVMOSHandle *handle = (MVMOSHandle *)tc->instance->stdout_handle; ^~~~~~ compiling src/strings/shiftjis_codeindex.o src/strings/ops.c: In function 'string_equal_at_ignore_case': src/strings/ops.c:1218:20: warning: unused variable 'n_graphs' [-Wunused-variable] MVMStringIndex n_graphs = MVM_string_graphs(tc, needle); ^~~~~~~~ src/strings/ops.c: In function 'string_index_ignore_case': src/strings/ops.c:1333:14: warning: unused variable 'return_val' [-Wunused-variable] MVMint64 return_val = -1; ^~~~~~~~~~ src/strings/ops.c: In function 'MVM_string_ord_basechar_at': src/strings/ops.c:1410:14: warning: unused variable 'ready' [-Wunused-variable] MVMint32 ready; ^~~~~ In file included from src/moar.h:178, from src/strings/latin1.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/latin1.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/strings/shiftjis.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/shiftjis.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/strings/utf8_c8.c:1: src/strings/utf8_c8.c: In function 'MVM_string_utf8_c8_encode_substr': src/strings/iter.h:175:39: warning: 'gi.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/utf8_c8.c:646:22: note: 'gi.next_strand' was declared here MVMGraphemeIter gi; ^~ In file included from src/moar.h:100, from src/strings/utf16.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/utf16.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:101, from src/strings/ops.c:3: At top level: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/strings/windows1252.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/windows1252.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/strings/utf16.c: In function 'MVM_string_utf16_decodestream_main': src/strings/utf16.c:132:27: warning: unused variable 'g' [-Wunused-variable] MVMGrapheme32 g; ^ src/strings/utf16.c:59:31: warning: variable 'last_was_cr' set but not used [-Wunused-but-set-variable] MVMint32 last_accept_pos, last_was_cr; ^~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/utf16.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/utf16.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/latin1.c:1: src/strings/latin1.c: In function 'MVM_string_latin1_encode_substr': src/strings/iter.h:175:39: warning: 'ci.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/latin1.c:171:26: note: 'ci.next_strand' was declared here MVMCodepointIter ci; ^~ src/strings/shiftjis.c: In function 'MVM_string_shiftjis_decode': src/strings/shiftjis.c:192:36: warning: unused variable 'additional_bytes' [-Wunused-variable] size_t pos = 0, result_graphs, additional_bytes = 0; ^~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/utf8.c:1: src/strings/utf8.c: In function 'MVM_string_utf8_encode_substr': src/strings/iter.h:175:39: warning: 'ci.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/utf8.c:519:22: note: 'ci.next_strand' was declared here MVMCodepointIter ci; ^~ In file included from src/moar.h:100, from src/strings/shiftjis_codeindex.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/shiftjis_codeindex.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/strings/windows1252.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/windows1252.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/shiftjis.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/shiftjis.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/math/bigintops.o compiling src/profiler/instrument.o compiling src/profiler/log.o In file included from src/strings/shiftjis_codeindex.c:2: At top level: src/strings/shiftjis_codeindex.h:598:17: warning: 'shift_jis_cp_to_index' defined but not used [-Wunused-function] static MVMint16 shift_jis_cp_to_index (MVMThreadContext *tc, MVMGrapheme32 codepoint) { ^~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/shiftjis_codeindex.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/shiftjis_codeindex.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/profiler/profile.o In file included from src/moar.h:100, from src/math/bigintops.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/math/bigintops.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/profiler/heapsnapshot.o In file included from src/moar.h:100, from src/profiler/instrument.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/profiler/instrument.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/math/bigintops.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/math/bigintops.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/profiler/instrument.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/profiler/instrument.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/profiler/log.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/profiler/log.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/profiler/profile.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/profiler/profile.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/strings/utf16.c:1: src/strings/utf16.c: In function 'MVM_string_utf16_encode_substr_main': src/strings/iter.h:175:39: warning: 'ci.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/utf16.c:324:22: note: 'ci.next_strand' was declared here MVMCodepointIter ci; ^~ In file included from src/moar.h:178, from src/profiler/log.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/profiler/log.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:100, from src/profiler/heapsnapshot.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/profiler/heapsnapshot.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:178, from src/strings/normalize.c:1: src/strings/normalize.c: In function 'MVM_unicode_string_to_codepoints': src/strings/iter.h:175:39: warning: 'ci.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/normalize.c:150:23: note: 'ci.next_strand' was declared here MVMCodepointIter ci; ^~ In file included from src/moar.h:178, from src/profiler/profile.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/profiler/profile.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/profiler/telemeh.o In file included from src/6model/reprs.h:4, from src/moar.h:128, from src/profiler/heapsnapshot.c:1: src/profiler/heapsnapshot.c: In function 'record_snapshot': src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/profiler/heapsnapshot.c:639:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(tc, hash_handle, MVMHeapSnapshotSeen, ss.seen); ^~~~~~~~~~~~~~~~ src/profiler/heapsnapshot.c: In function 'references_to_filehandle': src/profiler/heapsnapshot.c:861:22: warning: unused variable 'descr8' [-Wunused-variable] MVMuint8 descr8, kind8, index8; ^~~~~~ At top level: src/profiler/heapsnapshot.c:154:13: warning: 'add_reference_cstr' defined but not used [-Wunused-function] static void add_reference_cstr(MVMThreadContext *tc, MVMHeapSnapshotState *ss, ^~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/profiler/heapsnapshot.c:1: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/profiler/heapsnapshot.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/windows1252.c:1: src/strings/windows1252.c: In function 'MVM_string_windows125X_encode_substr': src/strings/iter.h:175:39: warning: 'ci.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/windows1252.c:598:26: note: 'ci.next_strand' was declared here MVMCodepointIter ci; ^~ compiling src/profiler/configuration.o In file included from src/moar.h:100, from src/profiler/telemeh.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/profiler/telemeh.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/instrument/crossthreadwrite.o compiling src/instrument/line_coverage.o In file included from src/moar.h:178, from src/profiler/telemeh.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/profiler/telemeh.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/platform/sys.o In file included from src/moar.h:100, from src/profiler/configuration.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/profiler/configuration.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/platform/random.o In file included from src/moar.h:100, from src/instrument/crossthreadwrite.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/instrument/crossthreadwrite.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/instrument/line_coverage.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/instrument/line_coverage.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/profiler/configuration.c: In function 'validate_operands': src/profiler/configuration.c:189:21: warning: unused variable 'operands' [-Wunused-variable] const MVMuint8 *operands = state->cur_op->operands; ^~~~~~~~ src/profiler/configuration.c: In function 'validate_op': src/profiler/configuration.c:292:19: warning: variable 'hint' set but not used [-Wunused-but-set-variable] MVMuint16 hint; ^~~~ src/profiler/configuration.c:289:19: warning: variable 'target_reg_num' set but not used [-Wunused-but-set-variable] MVMuint16 target_reg_num; ^~~~~~~~~~~~~~ src/profiler/configuration.c: In function 'MVM_confprog_run': src/profiler/configuration.c:823:26: warning: unused variable 'exit_code' [-Wunused-variable] MVMint64 exit_code = GET_REG(cur_op, 0).i64; ^~~~~~~~~ src/profiler/configuration.c:930:64: warning: pointer targets in passing argument 4 of 'MVM_code_location_out' differ in signedness [-Wpointer-sign] MVM_code_location_out(tc, code_obj, &file_out, &line_out); ^~~~~~~~~ In file included from src/6model/reprs.h:8, from src/moar.h:128, from src/profiler/configuration.c:1: src/6model/reprs/MVMCode.h:21:6: note: expected 'MVMint32 *' {aka 'int *'} but argument is of type 'MVMuint32 *' {aka 'unsigned int *'} void MVM_code_location_out(MVMThreadContext *tc, MVMObject *code, ^~~~~~~~~~~~~~~~~~~~~ src/profiler/configuration.c: In function 'MVM_confprog_validate': src/profiler/configuration.c:440:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ In file included from src/moar.h:178, from src/instrument/crossthreadwrite.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/instrument/crossthreadwrite.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/profiler/configuration.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/profiler/configuration.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ src/instrument/line_coverage.c: In function 'instrument_graph_with_breakpoints': src/instrument/line_coverage.c:11:14: warning: unused variable 'last_line_number' [-Wunused-variable] MVMint32 last_line_number = -2; ^~~~~~~~~~~~~~~~ src/instrument/line_coverage.c:9:15: warning: unused variable 'array_slot' [-Wunused-variable] MVMuint16 array_slot = 0; ^~~~~~~~~~ In file included from src/moar.h:178, from src/instrument/line_coverage.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/instrument/line_coverage.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/platform/memmem32.o In file included from src/moar.h:100, from src/platform/sys.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/platform/sys.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ src/profiler/configuration.c: In function 'operand_size': src/profiler/configuration.c:88:15: warning: 'size' may be used uninitialized in this function [-Wmaybe-uninitialized] MVMuint32 size; ^~~~ In file included from src/moar.h:178, from src/platform/sys.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/platform/sys.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/platform/malloc_trim.o In file included from src/moar.h:100, from src/platform/memmem32.c:29: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/platform/memmem32.c:29: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/moar.o compiling src/platform/posix/mmap.o In file included from src/moar.h:100, from src/platform/random.c:62: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:178, from src/platform/memmem32.c:29: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/platform/memmem32.c:29: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/platform/random.c:62: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/platform/posix/time.o In file included from src/moar.h:178, from src/platform/random.c:62: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/platform/random.c:62: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling src/platform/posix/io.o In file included from src/moar.h:100, from src/moar.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/moar.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling src/platform/posix/fork.o compiling src/jit/stub.o compiling 3rdparty/cmp/cmp.o In file included from src/moar.h:100, from src/platform/posix/mmap.c:3: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/platform/posix/mmap.c:3: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/platform/posix/time.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/platform/posix/time.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/6model/reprs.h:4, from src/moar.h:128, from src/moar.c:1: src/moar.c: In function 'MVM_vm_destroy_instance': src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:539:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMReprRegistry, instance->repr_hash); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:558:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMHLLConfig, instance->compiler_hll_configs); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:559:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMHLLConfig, instance->compilee_hll_configs); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:563:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMDLLRegistry, instance->dll_registry); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:567:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMExtRegistry, instance->ext_registry); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:571:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMExtOpRegistry, instance->extop_registry); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:576:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMSerializationContextBody, instance->sc_weakhash); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:580:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMLoadedCompUnitName, instance->loaded_compunits); ^~~~~~~~~~~~~~~~ src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/moar.c:584:5: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(instance->main_thread, hash_handle, MVMContainerRegistry, instance->container_registry); ^~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/platform/posix/mmap.c:3: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/platform/posix/mmap.c:3: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/platform/posix/time.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/platform/posix/time.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/moar.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/moar.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ linking 3rdparty/libatomicops/src/libatomic_ops.a compiling 3rdparty/tinymt/tinymt64.o compiling 3rdparty/sha1/sha1.o In file included from src/moar.h:100, from src/jit/stub.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/jit/stub.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ In file included from src/moar.h:100, from src/platform/posix/fork.c:1: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/platform/posix/fork.c:1: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ compiling 3rdparty/libtommath/bn_error.o In file included from src/moar.h:178, from src/jit/stub.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/jit/stub.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/platform/posix/fork.c:1: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/platform/posix/fork.c:1: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ compiling 3rdparty/libtommath/bn_fast_mp_invmod.o compiling 3rdparty/libtommath/bn_fast_mp_montgomery_reduce.o compiling 3rdparty/libtommath/bn_fast_s_mp_mul_digs.o compiling 3rdparty/libtommath/bn_fast_s_mp_mul_high_digs.o compiling 3rdparty/libtommath/bn_fast_s_mp_sqr.o compiling 3rdparty/libtommath/bn_mp_2expt.o compiling 3rdparty/libtommath/bn_mp_abs.o compiling 3rdparty/libtommath/bn_mp_add.o compiling 3rdparty/libtommath/bn_mp_add_d.o compiling 3rdparty/libtommath/bn_mp_addmod.o compiling 3rdparty/libtommath/bn_mp_and.o compiling 3rdparty/libtommath/bn_mp_clamp.o compiling 3rdparty/libtommath/bn_mp_clear.o compiling 3rdparty/libtommath/bn_mp_clear_multi.o compiling 3rdparty/libtommath/bn_mp_cmp.o compiling 3rdparty/libtommath/bn_mp_cmp_d.o compiling 3rdparty/libtommath/bn_mp_cmp_mag.o compiling 3rdparty/libtommath/bn_mp_cnt_lsb.o compiling 3rdparty/libtommath/bn_mp_copy.o compiling 3rdparty/libtommath/bn_mp_count_bits.o compiling 3rdparty/libtommath/bn_mp_div.o compiling 3rdparty/libtommath/bn_mp_div_2.o In file included from src/moar.h:178, from src/strings/shiftjis.c:1: src/strings/shiftjis.c: In function 'MVM_string_shiftjis_encode_substr': src/strings/iter.h:175:39: warning: 'ci.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/shiftjis.c:38:26: note: 'ci.next_strand' was declared here MVMCodepointIter ci; ^~ compiling 3rdparty/libtommath/bn_mp_div_2d.o compiling 3rdparty/libtommath/bn_mp_div_3.o compiling 3rdparty/libtommath/bn_mp_div_d.o compiling 3rdparty/libtommath/bn_mp_dr_is_modulus.o compiling 3rdparty/libtommath/bn_mp_dr_reduce.o compiling 3rdparty/libtommath/bn_mp_dr_setup.o compiling 3rdparty/libtommath/bn_mp_exch.o compiling 3rdparty/libtommath/bn_mp_export.o compiling 3rdparty/libtommath/bn_mp_expt_d.o compiling 3rdparty/libtommath/bn_mp_expt_d_ex.o checking build system type... compiling 3rdparty/libtommath/bn_mp_exptmod.o compiling 3rdparty/libtommath/bn_mp_exptmod_fast.o compiling 3rdparty/libtommath/bn_mp_exteuclid.o compiling 3rdparty/libtommath/bn_mp_fread.o compiling 3rdparty/libtommath/bn_mp_fwrite.o compiling 3rdparty/libtommath/bn_mp_gcd.o compiling 3rdparty/libtommath/bn_mp_get_int.o powerpc64le-unknown-linux-gnu checking host system type... powerpc64le-unknown-linux-gnu checking target system type... powerpc64le-unknown-linux-gnu checking for a BSD-compatible install... compiling 3rdparty/libtommath/bn_mp_get_long.o /usr/bin/install -c checking whether build environment is sane... compiling 3rdparty/libtommath/bn_mp_get_long_long.o compiling 3rdparty/libtommath/bn_mp_grow.o yes compiling 3rdparty/libtommath/bn_mp_import.o compiling 3rdparty/libtommath/bn_mp_init.o compiling 3rdparty/libtommath/bn_mp_init_copy.o compiling 3rdparty/libtommath/bn_mp_init_multi.o compiling 3rdparty/libtommath/bn_mp_init_set.o compiling 3rdparty/libtommath/bn_mp_init_set_int.o compiling 3rdparty/libtommath/bn_mp_init_size.o compiling 3rdparty/libtommath/bn_mp_invmod.o checking for a thread-safe mkdir -p... /usr/bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... compiling 3rdparty/libtommath/bn_mp_invmod_slow.o compiling 3rdparty/libtommath/bn_mp_is_square.o yes compiling 3rdparty/libtommath/bn_mp_jacobi.o compiling 3rdparty/libtommath/bn_mp_karatsuba_mul.o compiling 3rdparty/libtommath/bn_mp_karatsuba_sqr.o checking whether make supports nested variables... compiling 3rdparty/libtommath/bn_mp_lcm.o yes compiling 3rdparty/libtommath/bn_mp_lshd.o checking whether to enable maintainer-specific portions of Makefiles... no checking for style of include used by make... GNU compiling 3rdparty/libtommath/bn_mp_mod.o compiling 3rdparty/libtommath/bn_mp_mod_2d.o checking for gcc... gcc compiling 3rdparty/libtommath/bn_mp_mod_d.o compiling 3rdparty/libtommath/bn_mp_montgomery_calc_normalization.o compiling 3rdparty/libtommath/bn_mp_montgomery_reduce.o compiling 3rdparty/libtommath/bn_mp_montgomery_setup.o compiling 3rdparty/libtommath/bn_mp_mul.o compiling 3rdparty/libtommath/bn_mp_mul_2.o checking whether the C compiler works... compiling 3rdparty/libtommath/bn_mp_mul_2d.o In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/ops.c: In function 'MVM_string_index_of_grapheme': src/strings/iter.h:175:39: warning: 'gi.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/ops.c:1480:21: note: 'gi.next_strand' was declared here MVMGraphemeIter gi; ^~ compiling 3rdparty/libtommath/bn_mp_mul_d.o compiling 3rdparty/libtommath/bn_mp_mulmod.o compiling 3rdparty/libtommath/bn_mp_n_root.o yes checking for C compiler default output file name... a.out checking for suffix of executables... compiling 3rdparty/libtommath/bn_mp_n_root_ex.o compiling 3rdparty/libtommath/bn_mp_neg.o compiling 3rdparty/libtommath/bn_mp_or.o compiling 3rdparty/libtommath/bn_mp_prime_fermat.o compiling 3rdparty/libtommath/bn_mp_prime_is_divisible.o compiling 3rdparty/libtommath/bn_mp_prime_is_prime.o compiling 3rdparty/libtommath/bn_mp_prime_miller_rabin.o compiling 3rdparty/libtommath/bn_mp_prime_next_prime.o compiling 3rdparty/libtommath/bn_mp_prime_rabin_miller_trials.o checking whether we are cross compiling... compiling 3rdparty/libtommath/bn_mp_prime_random_ex.o compiling 3rdparty/libtommath/bn_mp_radix_size.o compiling 3rdparty/libtommath/bn_mp_radix_smap.o compiling 3rdparty/libtommath/bn_mp_rand.o compiling 3rdparty/libtommath/bn_mp_read_radix.o compiling 3rdparty/libtommath/bn_mp_read_signed_bin.o compiling 3rdparty/libtommath/bn_mp_read_unsigned_bin.o compiling 3rdparty/libtommath/bn_mp_reduce.o compiling 3rdparty/libtommath/bn_mp_reduce_2k.o compiling 3rdparty/libtommath/bn_mp_reduce_2k_l.o compiling 3rdparty/libtommath/bn_mp_reduce_2k_setup.o compiling 3rdparty/libtommath/bn_mp_reduce_2k_setup_l.o compiling 3rdparty/libtommath/bn_mp_reduce_is_2k.o no compiling 3rdparty/libtommath/bn_mp_reduce_is_2k_l.o checking for suffix of object files... compiling 3rdparty/libtommath/bn_mp_reduce_setup.o compiling 3rdparty/libtommath/bn_mp_rshd.o compiling 3rdparty/libtommath/bn_mp_set.o compiling 3rdparty/libtommath/bn_mp_set_int.o compiling 3rdparty/libtommath/bn_mp_set_long.o compiling 3rdparty/libtommath/bn_mp_set_long_long.o compiling 3rdparty/libtommath/bn_mp_signed_bin_size.o compiling 3rdparty/libtommath/bn_mp_shrink.o o checking whether we are using the GNU C compiler... compiling 3rdparty/libtommath/bn_mp_sqr.o yes checking whether gcc accepts -g... compiling 3rdparty/libtommath/bn_mp_sqrmod.o compiling 3rdparty/libtommath/bn_mp_sqrt.o compiling 3rdparty/libtommath/bn_mp_sqrtmod_prime.o yes compiling 3rdparty/libtommath/bn_mp_sub.o checking for gcc option to accept ISO C89... compiling 3rdparty/libtommath/bn_mp_sub_d.o compiling 3rdparty/libtommath/bn_mp_submod.o compiling 3rdparty/libtommath/bn_mp_to_signed_bin.o compiling 3rdparty/libtommath/bn_mp_to_signed_bin_n.o compiling 3rdparty/libtommath/bn_mp_to_unsigned_bin.o compiling 3rdparty/libtommath/bn_mp_to_unsigned_bin_n.o compiling 3rdparty/libtommath/bn_mp_toom_mul.o none needed checking whether gcc understands -c and -o together... compiling 3rdparty/libtommath/bn_mp_toom_sqr.o compiling 3rdparty/libtommath/bn_mp_toradix.o compiling 3rdparty/libtommath/bn_mp_toradix_n.o yes checking dependency style of gcc... compiling 3rdparty/libtommath/bn_mp_unsigned_bin_size.o compiling 3rdparty/libtommath/bn_mp_xor.o compiling 3rdparty/libtommath/bn_mp_zero.o compiling 3rdparty/libtommath/bn_prime_tab.o In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/ops.c: In function 'MVM_string_bitand': src/strings/iter.h:175:39: warning: 'ci_b.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/ops.c:2458:28: note: 'ci_b.next_strand' was declared here MVMCodepointIter ci_a, ci_b;\ ^~~~ src/strings/ops.c:2516:5: note: in expansion of macro 'MVM_STRING_BITOP' MVM_STRING_BITOP( & , 0, "bitwise and") ^~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/iter.h:175:39: warning: 'ci_a.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/ops.c:2458:22: note: 'ci_a.next_strand' was declared here MVMCodepointIter ci_a, ci_b;\ ^~~~ src/strings/ops.c:2516:5: note: in expansion of macro 'MVM_STRING_BITOP' MVM_STRING_BITOP( & , 0, "bitwise and") ^~~~~~~~~~~~~~~~ compiling 3rdparty/libtommath/bn_reverse.o compiling 3rdparty/libtommath/bn_s_mp_add.o compiling 3rdparty/libtommath/bn_s_mp_exptmod.o gcc3 checking dependency style of gcc... compiling 3rdparty/libtommath/bn_s_mp_mul_digs.o compiling 3rdparty/libtommath/bn_s_mp_mul_high_digs.o compiling 3rdparty/libtommath/bn_s_mp_sqr.o compiling 3rdparty/libtommath/bn_s_mp_sub.o compiling 3rdparty/libtommath/bncore.o compiling 3rdparty/libuv/src/unix/linux-core.o compiling 3rdparty/libuv/src/unix/linux-inotify.o gcc3 checking for ranlib... ranlib checking how to run the C preprocessor... compiling 3rdparty/libuv/src/unix/linux-syscalls.o compiling 3rdparty/libuv/src/unix/procfs-exepath.o compiling 3rdparty/libuv/src/unix/proctitle.o compiling 3rdparty/libuv/src/strscpy.o compiling 3rdparty/libuv/src/fs-poll.o compiling 3rdparty/libuv/src/inet.o compiling 3rdparty/libuv/src/uv-common.o gcc -E compiling 3rdparty/libuv/src/version.o compiling 3rdparty/libuv/src/timer.o compiling 3rdparty/libuv/src/unix/async.o In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/ops.c: In function 'MVM_string_bitxor': src/strings/iter.h:302:12: warning: 'ci_a.total_synth_codes' may be used uninitialized in this function [-Wmaybe-uninitialized] if (ci->visited_synth_codes == ci->total_synth_codes) ^ src/strings/ops.c:2458:22: note: 'ci_a.total_synth_codes' was declared here MVMCodepointIter ci_a, ci_b;\ ^~~~ src/strings/ops.c:2525:5: note: in expansion of macro 'MVM_STRING_BITOP' MVM_STRING_BITOP( ^ , 1, "bitwise xor"); ^~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/iter.h:301:32: warning: 'ci_a.visited_synth_codes' may be used uninitialized in this function [-Wmaybe-uninitialized] ci->visited_synth_codes++; ~~~~~~~~~~~~~~~~~~~~~~~^~ src/strings/ops.c:2458:22: note: 'ci_a.visited_synth_codes' was declared here MVMCodepointIter ci_a, ci_b;\ ^~~~ src/strings/ops.c:2525:5: note: in expansion of macro 'MVM_STRING_BITOP' MVM_STRING_BITOP( ^ , 1, "bitwise xor"); ^~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/iter.h:175:39: warning: 'ci_b.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/ops.c:2458:28: note: 'ci_b.next_strand' was declared here MVMCodepointIter ci_a, ci_b;\ ^~~~ src/strings/ops.c:2525:5: note: in expansion of macro 'MVM_STRING_BITOP' MVM_STRING_BITOP( ^ , 1, "bitwise xor"); ^~~~~~~~~~~~~~~~ In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/iter.h:175:39: warning: 'ci_a.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/ops.c:2458:22: note: 'ci_a.next_strand' was declared here MVMCodepointIter ci_a, ci_b;\ ^~~~ src/strings/ops.c:2525:5: note: in expansion of macro 'MVM_STRING_BITOP' MVM_STRING_BITOP( ^ , 1, "bitwise xor"); ^~~~~~~~~~~~~~~~ checking for grep that handles long lines and -e... compiling 3rdparty/libuv/src/unix/core.o /usr/bin/grep checking for egrep... /usr/bin/grep -E checking for ANSI C header files... compiling 3rdparty/libuv/src/unix/dl.o compiling 3rdparty/libuv/src/unix/fs.o compiling 3rdparty/libuv/src/unix/getaddrinfo.o compiling 3rdparty/libuv/src/unix/loop-watcher.o compiling 3rdparty/libuv/src/unix/loop.o compiling 3rdparty/libuv/src/unix/pipe.o compiling 3rdparty/libuv/src/unix/poll.o compiling 3rdparty/libuv/src/unix/process.o compiling 3rdparty/libuv/src/unix/signal.o compiling 3rdparty/libuv/src/unix/stream.o In file included from src/moar.h:178, from src/strings/ops.c:3: src/strings/ops.c: In function 'MVM_string_find_cclass': src/strings/iter.h:175:39: warning: 'gi.next_strand' may be used uninitialized in this function [-Wmaybe-uninitialized] gi->pos = next->start; ~~~~^~~~~~~ src/strings/ops.c:2652:21: note: 'gi.next_strand' was declared here MVMGraphemeIter gi; ^~ 3rdparty/libuv/src/unix/signal.c: In function 'uv__signal_stop': 3rdparty/libuv/src/unix/signal.c:542:7: warning: variable 'ret' set but not used [-Wunused-but-set-variable] int ret; ^~~ compiling 3rdparty/libuv/src/unix/tcp.o yes checking for sys/types.h... compiling 3rdparty/libuv/src/unix/thread.o compiling 3rdparty/libuv/src/threadpool.o yes compiling 3rdparty/libuv/src/unix/tty.o compiling 3rdparty/libuv/src/unix/udp.o checking for sys/stat.h... /usr/bin/perl build/mk-moar-pc.pl pkgconfig/moar.pc compiling src/strings/unicode.o linking 3rdparty/cmp/libcmp.a linking 3rdparty/tinymt/libtinymt.a linking 3rdparty/sha1/libsha1.a linking 3rdparty/libtommath/libtommath.a yes checking for stdlib.h... yes In file included from src/moar.h:100, from src/strings/unicode.c:56: src/strings/uthash.h: In function 'HASH_ADD_TO_BKT': src/strings/uthash.h:633:25: warning: unused variable 'next' [-Wunused-variable] UT_hash_handle *next = addhh->hh_next = head->hh_next; ^~~~ In file included from src/moar.h:101, from src/strings/unicode.c:56: src/core/interp.h: In function 'MVM_BC_get_N64': src/core/interp.h:119:27: warning: unused variable 'where' [-Wunused-variable] const MVMuint8 *const where = cur_op + offset; ^~~~~ checking for string.h... src/strings/unicode.c: At top level: src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } yes checking for memory.h... src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } src/strings/unicode.c:280:56: warning: missing braces around initializer [-Wmissing-braces] static const MVMint32 SpecialCasing_table[104][3][3] = { ^ {0x0,0x0,0x0}, { } yes checking for strings.h... linking 3rdparty/libuv/libuv.a yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for sys/param.h... yes checking for getpagesize... yes checking for working mmap... yes checking for PIC compiler flag... -fPIC checking whether gcc -fPIC causes __PIC__ definition... yes checking for gcc -Wextra... yes checking for pthread_self in -lpthread... yes checking that generated files are newer than configure... done configure: creating ./config.status config.status: creating src/Makefile config.status: creating src/config.h config.status: executing depfiles commands config.status: executing default commands make[1]: Entering directory '/builddir/build/BUILD/MoarVM-2019.07.1/3rdparty/libatomicops/src' make all-am make[2]: Entering directory '/builddir/build/BUILD/MoarVM-2019.07.1/3rdparty/libatomicops/src' gcc -DHAVE_CONFIG_H -I../src -I../src -fPIC -Wall -Wextra -Werror=declaration-after-statement -Werror=pointer-arith -O3 -DNDEBUG -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DHAVE_LIBFFI -fPIC -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mcpu=power8 -mtune=power8 -funwind-tables -fstack-clash-protection -DMVM_TRACING=0 -DMVM_CGOTO=1 -DMVM_RDTSCP=0 -MT atomic_ops.o -MD -MP -MF .deps/atomic_ops.Tpo -c -o atomic_ops.o atomic_ops.c mv -f .deps/atomic_ops.Tpo .deps/atomic_ops.Po rm -f libatomic_ops.a ar cru libatomic_ops.a atomic_ops.o ranlib libatomic_ops.a make[2]: Leaving directory '/builddir/build/BUILD/MoarVM-2019.07.1/3rdparty/libatomicops/src' make[1]: Leaving directory '/builddir/build/BUILD/MoarVM-2019.07.1/3rdparty/libatomicops/src' src/strings/unicode.c: In function 'collation_push_MVM_values': src/strings/unicode.c:83737:34: warning: missing braces around initializer [-Wmissing-braces] collation_key MVM_coll_key = { ^ MVM_unicode_collation_primary(tc, cp), MVM_unicode_collation_secondary(tc, cp), MVM_unicode_collation_tertiary(tc, cp), 0 { }; } src/strings/unicode.c:83745:43: warning: missing braces around initializer [-Wmissing-braces] collation_key calculated_key[2] = { ^ {0, 0x20, 0x2, 0}, { } src/strings/unicode.c:83745:43: warning: missing braces around initializer [-Wmissing-braces] collation_key calculated_key[2] = { ^ {0, 0x20, 0x2, 0}, { } {0, 0x00, 0x0, 0} { } src/strings/unicode.c:83745:43: warning: missing braces around initializer [-Wmissing-braces] collation_key calculated_key[2] = { ^ {0, 0x20, 0x2, 0}, { } {0, 0x00, 0x0, 0} { } src/strings/unicode.c:83744:15: warning: unused variable 'block_pushed' [-Wunused-variable] char *block_pushed = NULL; ^~~~~~~~~~~~ src/strings/unicode.c: In function 'get_main_node': src/strings/unicode.c:83855:9: warning: unused variable 'counter' [-Wunused-variable] int counter = 0; ^~~~~~~ src/strings/unicode.c: In function 'collation_push_cp': src/strings/unicode.c:83879:9: warning: unused variable 'cp_num_orig' [-Wunused-variable] int cp_num_orig = cp_num; ^~~~~~~~~~~ src/strings/unicode.c:83875:14: warning: variable 'rtrn' set but not used [-Wunused-but-set-variable] MVMint64 rtrn = 0; ^~~~ src/strings/unicode.c: In function 'init_ringbuffer': src/strings/unicode.c:83955:14: warning: unused variable 'i' [-Wunused-variable] MVMint64 i; ^ src/strings/unicode.c: In function 'MVM_unicode_string_compare': src/strings/unicode.c:84009:38: warning: missing braces around initializer [-Wmissing-braces] level_eval level_eval_settings = { ^ { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} } { } src/strings/unicode.c:84009:38: warning: missing braces around initializer [-Wmissing-braces] level_eval level_eval_settings = { ^ { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} } { } { } src/strings/unicode.c:84009:38: warning: missing braces around initializer [-Wmissing-braces] level_eval level_eval_settings = { ^ { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} } { } { } { } src/strings/unicode.c:84009:38: warning: missing braces around initializer [-Wmissing-braces] level_eval level_eval_settings = { ^ { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} } { } { } { } { } src/strings/unicode.c:84009:38: warning: missing braces around initializer [-Wmissing-braces] level_eval level_eval_settings = { ^ { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} } { } { } { } { } src/strings/unicode.c:84009:38: warning: missing braces around initializer [-Wmissing-braces] level_eval level_eval_settings = { ^ { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} } { } { } { } { } src/strings/unicode.c:84024:36: warning: unused variable 'i' [-Wunused-variable] MVMint64 pos_a = 0, pos_b = 0, i = 0, rtrn = 0; ^ src/strings/unicode.c:84007:23: warning: unused variable 'bi' [-Wunused-variable] MVMGrapheme32 ai, bi; ^~ src/strings/unicode.c:84007:19: warning: unused variable 'ai' [-Wunused-variable] MVMGrapheme32 ai, bi; ^~ src/strings/unicode.c: In function 'MVM_unicode_lookup_by_name': src/strings/unicode.c:84181:15: warning: unused variable 'size' [-Wunused-variable] MVMuint64 size; ^~~~ In file included from src/6model/reprs.h:4, from src/moar.h:128, from src/strings/unicode.c:56: src/strings/unicode.c: In function 'MVM_unicode_release': src/6model/reprs/MVMHash.h:49:14: warning: unused variable 'bucket_tmp' [-Wunused-variable] unsigned bucket_tmp; \ ^~~~~~~~~~ src/strings/unicode.c:84561:13: note: in expansion of macro 'MVM_HASH_DESTROY' MVM_HASH_DESTROY(tc, hash_handle, MVMUnicodeNameRegistry, unicode_property_values_hashes[i]); ^~~~~~~~~~~~~~~~ src/strings/unicode.c:84549:37: warning: unused variable 'entry' [-Wunused-variable] MVMUnicodeNameRegistry *entry = NULL; ^~~~~ In file included from src/moar.h:178, from src/strings/unicode.c:56: At top level: src/strings/iter.h:57:13: warning: 'MVM_string_gi_next_strand_rep' defined but not used [-Wunused-function] static void MVM_string_gi_next_strand_rep(MVMThreadContext *tc, MVMGraphemeIter *gi) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from src/moar.h:101, from src/strings/unicode.c:56: src/core/interp.h:129:15: warning: 'MVM_reg_get_debug_name' defined but not used [-Wunused-function] static char * MVM_reg_get_debug_name(MVMThreadContext *tc, MVMuint16 type) { ^~~~~~~~~~~~~~~~~~~~~~ linking libmoar.so linking moar + for F in docs/*.markdown docs/*.md + markdown_py-3 docs/6model-parametric-extensions.markdown

6model parametric extensions in MoarVM

Overview

The 6model parametric extensions add parametric type support at the VM level. A type may configure itself as supporting parameterization. Parameterizations each have a unique key, which is used to intern them. This ensures each of the parameterizations exists only once. In the case that two modules both produce and serialize a parameterization, that from the second module may be freely disregarded, and the existing deserialization of the parameterized type may be used. This ensures unique type objects per parameterization are upheld even in the case of precompilation.

Each parameterization will have a unique STable and type object. It is up to the meta-object whether the HOW is shared between parameterizations. For example, parametric roles reify the methods within them with concrete type parameters, so a separate HOW is required. By contrast, CoerceHOW, the meta-object for coercion types, can store all that is distinctive about it within the type's parameters. Since a given parameteriation can be queried for its parameters, it is possible for all Perl 6 coercion types to share a single meta-object.

STable extensions

The mode flags on an STable get two new additions:

  • Parametric (this type can be parameterized)
  • Parameterization (this type is the parameterization of some parametric type)

A type cannot be both parametric and a parameterization, meaning we can use a union to store parametrics-related data.

union {
    struct {
        MVMObject *parameterizer;           /* Thing to invoke)
        MVMParameterizationLookup *lookup;  /* Known parameterizations */
    } parametric;
    struct {
        MVMObject *parametric_type;         /* The parameterized type */
        MVMObject *parameters;              /* The parameters. */
    } parameterized;
}

New ops

The VM op additions match the nqp::op additions for parametric types:

nqp::setparameterizer(type, parameterizer)

Makes a type as being parametric, and configures the code needed to parameterize it.

nqp::parameterizetype(type, parameter_array)

Takes a parameterizable type and an array of parameters. Looks up and returns any existing matching parameterization. If it does not exist, invokes the parameterization producer for the parametric type, installs that in the lookup, and returns it. Note that the array is snapshotted, for the benefits of the type specializer.

nqp::typeparameterized(type)

If the type specified is a parameterization of some other type, then returns that type. Otherwise, returns null.

nqp::typeparameters(type)

Gets the type parameters used to parameterize the type. Throws an exception if the type is not parametric.

nqp::typeparameterat(type, idx)

Equivalent to nqp::atpos(nqp::typeparameters(type), idx), except much easier for type specialization to understand and deal with and avoids an array construction.

Interaction with spesh

Specializations can take place per parameterization of a type. This means that uses of nqp::typeparameterat(...) can become constants at specialization time, which opens up numerous optimization possibilities.

Deserialize-time interning

XXX To define

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/arg-passing.markdown

Argument Passing

Every invocation in MoarVM consists of two pieces:

  • A static Callsite descriptor (MVMCallsite), which incorporates the number of arguments along with a set of flags about what is being passed.
  • A contiguous group of MVMRegister, which is a union type. This contains the actual arguments being passed. The static descriptor indicates how to process the registers. As they are registers, they really are just a chunk of the register space in the caller, thus anything that wants the args for a longer period of time must work to keep them.

Memory management

Callsite descriptors are kept at a compilation unit level, and thus their lifetimes are simply that of the compilation unit. (An alternative way would be to keep a global store of these and intern them, fixing up all of the references to them at bytecode loading time.)

The argument data itself is more subtle. A simple approach would be to allocate the argument data array per call, but that's too much allocation for the common case. Thus each callframe, along with its working space, also allocates an amount of space equal to that required by the most demanding callsite (that is, the one that implies the most storage). This space is populated with arguments per call, and a pointer passed to the invocation target.

This area of memory will clearly never be safe to consider beyond the point that the callee yields control. Control is yielded by:

  • Returning
  • Yielding co-routine style
  • Calling anything that will potentially do co-routine or continuation stuff

Typically, though, an argument processor immediately copies what was passed into locals, lexicals and so forth. It may need to make its own copy of the original arguments if:

  • It wants to keep them around and present them "first class" (a bit like Perl 6 does with Captures, in order to do nextsame et al.)
  • Part way through processing them, some other code needs to be run in order to obtain default values, build up data structures, etc.

A language that doesn't need to worry about such matters will generally be able to avoid any of the copying. A language like NQP will be able to avoid it perhaps entirely, by handling default values after the initial binding. A language like Perl 6 will generally need to default to copying, but a decent optimizer should be able to whitelist routines where it's OK not to. Many simple built-in operators should make the cut, which will take the edge off the cases where compile-time inlining isn't possible.

Call Code Generation

A call looks something like:

prepargs   callsite  # set the callsite
argconst_i 0, 42     # set arg slot 0 to native int arg 42
arg_o      1, r0     # set arg slot 1 to object in register 0
call r1              # invoke the object in r1

The bytecode loader will analyse the callsite info, and ensure that between it and the call all of the required slots are given values, and that these are of the correct types. This is verified once when the bytecode is loaded, and at execution time needs no further consideration.

Note that there's no reason you can't have things like:

prepargs callsite       # set the callsite
argconst_i 0, 42        # set arg slot 0 to native int arg 42
get_lex_named r0, '$x'  # load lexical "$x" by name into register 0
arg_o 1, r0)            # set arg slot 1 to object in register 0
call r1                 # invoke the object in r1

That is, do lookups or computations of arguments while building the callsite. However, it is NOT allowable to nest prepargs/call sequences in the bytecode. There is only one chunk of memory available to store the arguments. Thus a call like:

foo(bar(42))

Will have to store the result of bar(42) in a register, then prepargs..call for foo(...) afterwards.

Parameter Handling

While some languages may have their own binding support driven by their own signature objects, the core instruction set provides a mechanism that should handle most needs.

Parameter handling may start with a use of the checkarity op, specifying the minimum and maximum number of positional arguments that may be passed.

checkarity 1, 1     # require 1 argument
checkarity 2, 3     # require 2 arguments, accept up to 3 (1 optional)

Required positional arguments can then be obtained by type:

param_rp_o r0, 0    # get 1st positional argument, which is an object
param_rp_s r1, 1    # get 2nd positional argument, which is a string

Optional positional arguments are fetched by a range of similar ops, except that they include a branch offset (that is, a label). If the argument is present, it is put into the register and we jump to the branch offset. If not, the next instruction is executed, which presumably is code to populate the register with a default value.

param_op_i r2, 2, L1
const_i64 r2, 0
L1:

The handling of named arguments is similar, with both required and optional variants of the ops.

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/bootstrap.markdown

6model Bootstrap (run-time)

MoarVM is based around the 6model object system. This must be bootstrapped as pretty much the first thing that the VM does after startup.

Bootstrap Procedure

The bootstrap is done something like this.

  • Create a type object that will become VMString, the VM's core string type. It will have no meta-object yet, and the STable will not be filled out. It will use the MVMString representation.
  • Populate the representations table and name to ID hash. This includes setting up all of the representation function tables. We needed the VMString first, as representation function tables contain the representation name in string form.
  • Create a type object BOOTArray, the VM's core array type. It will have the MVMObjectArray representation. Again, there's no meta-object just yet.
  • Create a type object BOOTHash, the VM's core hash type. It will have the MVMHash representation. Still no meta-objects.
  • Create a type object BOOTCCode, the VM's core code type for things implemented inside the VM in C (typically, just a very small number of bootstrap things). It will have the MVMCFunction representation. Still no...yeah, you got it. :-)
  • At this point, we finally have enough to bootstrap KnowHOW, the most primitive object type. This involves the KnowHOWREPR representation.
  • Finally, the various BOOT type objects get meta-objects pieced together, which are KnowHOWs. Note that it almost certainly doesn't offer any real functionality; the point is just to get a clean bootstrap with nothing left dangling.

Beyond that, there's nothing left to do in the VM core; all other objects are set up from code running atop of the VM.

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/bytecode.markdown

Bytecode

This document describes the bytecode that the VM interprets or JIT compiles. Note that this is just one part of an input file to the VM; along with it will also be a bunch of serialized objects, and some container. This just describes the way the executable segment of things looks. (In a sense, this is the low-level reification of the Actions/World distinction at the level of the compiler).

Endianness

All integer values are stored in little endian format.

Floats

Floating point numbers are represented according to IEEE 754.

Header

The header appears at the start of the MoarVM bytecode file, and indicates what it contains.

+---------------------------------------------------------+
| "MOARVM\r\n"                                            |
|    8-byte magic string; includes \r\n to catch mangling |
|    of line endings                                      |
+---------------------------------------------------------+
| Version                                                 |
|    32-bit unsigned integer; since we'll never reach a   |
|    huge number of versions, this also doubles up as a   |
|    check that no weird big/little endian issues keep us |
|    from reading the bytecode.                           |
+---------------------------------------------------------+
| Offset (from start of file) of the SC dependencies      |
| table                                                   |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of entries in the SC dependencies table          |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Offset (from start of file) of the extension ops table  |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of entries in the extension ops table            |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Offset (from start of file) of the frames data segment  |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of frames we should end up finding in the frames |
| data segment                                            |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Offset (from start of file) of the callsites data       |
| segment                                                 |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of callsites we should end up finding in the     |
| callsites data segment                                  |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Offset (from start of file) of the strings heap         |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of entries in the strings heap                   |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Offset (from start of file) of the SC data segment      |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Length of the SC data segment                           |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Offset (from start of file) of the bytecode segment     |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Length of the bytecode segment                          |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Offset (from start of file) of the annotation segment   |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Length of the annotation segment                        |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| HLL Name                                                |
|    32-bit unsigned integer index into the string heap,  |
|    providing the name of the HLL this compilation unit  |
|    was compiled from. May be the empty string.          |
+---------------------------------------------------------+
| Main entry point frame index + 1; 0 if no main frame    |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Library load frame index + 1; 0 if no load frame        |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Deserialization frame index + 1; 0 if none              |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+

Strings heap

This segment contains a bunch of string data. Each string is laid out as:

+---------------------------------------------------------+
| String length in bytes                                  |
|    32-bit unsigned integer left shifted by 1            |
|    LSB is flag where 1 means UTF-8 and 0 means latin-1  |
+---------------------------------------------------------+
| String data encoded as UTF-8/latin-1                    |
|    Bunch of bytes, padded at end to 32 bit boundary     |
+---------------------------------------------------------+

SC Dependencies Table

This table describes the SCs (Serialization Contexts) that the bytecode in this file references objects from. The wval opcode specifies an index in this table and an index in the SC itself. When the bytecode file is first loaded, we look in the known SCs table and resolve all that we can. Then, the deserialize code for the compilation unit is run. Whenever the SC creation opcode is used, we search all known compilation units to see if they have any unresolved SCs, and fill in any gaps that correspond to the newly created SC. By the time the deserialize phase for a compilation unit is over, we expect that all SCs have been resolved. Thus, the lifetime of an SC is equal to the lifetimes of all the compilation units that reference it, since their code depends on it. Note that the primary way an SC is rooted is through a compilation unit, and that these roots are established as soon as it is created, and before it's returned to userspace (which could allocate more) are the way we make sure it isn't collected too early.

+---------------------------------------------------------+
| Index into the string heap of the SC unique ID          |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+

Extension ops table

+---------------------------------------------------------+
| Index into the string heap of the extension op ID       |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Operand descriptor                                      |
|    Bunch of bytes describing a single operand each,     |
|    zero-padded to 8 bytes                               |
+---------------------------------------------------------+

The operand descriptor follows the same format as used by MVMOpInfo. The 8 bytes limit corresponds to MVM_MAX_OPERANDS.

Frames Data

The frames data segment contains data that describes all of the frames in the compilation unit. It also points into the bytecode segment, which contains the bytecode we will execute for this frame. This is stored elsewhere at least partly for the sake of demand paging and CPU cache efficiency; once we processed the static data, it's not very interesting at runtime, so there's no real reason for it to stay in memory, let alone be cached by the CPU. The actual bytecode itself, on the other hand, is (at least until JIT happens) of interest for execution.

Each frame starts with the following data.

+---------------------------------------------------------+
| Bytecode segment offset                                 |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Bytecode length in bytes                                |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of locals/registers                              |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of lexicals                                      |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Compilation unit unique ID                              |
|    32-bit string heap index                             |
+---------------------------------------------------------+
| Name                                                    |
|    32-bit string heap index                             |
+---------------------------------------------------------+
| Outer                                                   |
|    16-bit frame index of the outer frame. For no outer, |
|    this is set to the current frame index.              |
+---------------------------------------------------------+
| Annotation segment offset                               |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of annotations                                   |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Number of handlers                                      |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Frame flag bits                                         |
|    16-bit integer                                       |
|    1 = frame has an exit handler                        |
|    2 = frame is a thunk                                 |
|    Remaining values reserved                            |
| [NEW IN VERSION 2]                                      |
+---------------------------------------------------------+
| Number of entries in static lexical values table        |
|    16-bit integer                                       |
| [NEW IN VERSION 4]                                      |
+---------------------------------------------------------+
| Code object SC dependency index + 1; 0 if none          |
|    32-bit unsigned integer                              |
| [NEW IN VERSION 4]                                      |
+---------------------------------------------------------+
| SC object index; ignored if above is 0                  |
|    32-bit unsigned integer                              |
| [NEW IN VERSION 4]                                      |
+---------------------------------------------------------+
| Number of local debug name mappings                     |
|    32-bit unsigned integer                              |
| [NEW IN VERSION 6]                                      |
+---------------------------------------------------------+

This is followed, for each local, by a number indicating what kind of local it is. These are stored as 16-bit unsigned integers.

int8        1
int16       2
int32       3
int64       4
num32       5
num64       6
str         7
obj         8
uint8      17
uint16     18
uint32     19
uint64     20

Lexicals are similar, apart from each entry is followed by a 32-bit unsigned index into the string heap, which gives the name of the lexical.

[Conjectural: a future MoarVM may instead do these in terms of REPRs.]

Next comes the handlers table. Each handler has an entry as follows:

+---------------------------------------------------------+
| Start of protected region. Inclusive offset from start  |
| of the frame's bytecode                                 |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| End of protected region. Exclusive offset from start of |
| the frame's bytecode                                    |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Handler category mask bitfield                          |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| Handler action (see exceptions spec for values)         |
|    16-bit unsigned integer                              |
+---------------------------------------------------------+
| Register number containing the block to invoke, for a   |
| block handler.                                          |
|    16-bit unsigned integer                              |
+---------------------------------------------------------+
| Handler address to go to, or where to unwind to after   |
| an invoked handler. Offset from start of the frame's    |
| bytecode.                                               |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+

From version 4 and up, this is followed by a static lexical values table. Each entry is as follows:

+---------------------------------------------------------+
| Lexical index                                           |
|    16-bit unsigned integer                              |
+---------------------------------------------------------+
| Flag                                                    |
|    16-bit unsigned integer                              |
|    0 = static lexical value                             |
|    1 = container var (cloned per frame)                 |
|    2 = state var (cloned per closure)                   |
+---------------------------------------------------------+
| SC dependency index                                     |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+
| SC object index                                         |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+

From version 6 and up, this is followed by a debug local names table. Each entry is as follows:

+---------------------------------------------------------+
| Local index                                             |
|    16-bit unsigned integer                              |
+---------------------------------------------------------+
| String heap index for the debug name                    |
|    32-bit unsigned integer                              |
+---------------------------------------------------------+

Callsites Data

This data blob contains all of the callsite descriptors that are used in the compilation unit. At the point of loading the bytecode, they will be set up, and a table pointing to them created. This means that a callsite descriptor will always be a pointer + offset away.

Each callsite consists of a 16-bit unsigned integer indicating the number of argument flags. This is followed by the flags, taking 8 bits each. If the number of argument flags is odd, then an extra padding byte will be written afterwards. Since version 3, this is then followed with one index to the string heap (in the form of a 32-bit integer) for each argument flag that has the MVM_CALLSITE_ARG_NAMED bit set.

Bytecode segment

This consists of a sequence of instructions. Instruction codes are always 16 bits in length. The first 8 bits describe an instruction "bank", and the following 8 bits identify the instruction within that bank. Instruction banks 0 through 127 are reserved for MoarVM core ops or future needs. Instruction banks 128 through 255 are mappable per compilation unit, and are used for "plug-in" ops.

Opcodes may be followed by zero or more operands. The instruction set will have the needed operands described by the following set of descriptors.

r       local variable index being read, 16 bits unsigned
w       local variable index being written, 16 bits unsigned
rl      lexical variable being read, 16 bits unsigned for the
        index within a frame and 16 bits for how many frames out
        to go to locate it
wl      lexical variable being written, 16 bits unsigned for the
        index within a frame and 16 bits for how many frames out
        to go to locate it
i16     16-bit integer constant
i32     32-bit integer constant
i64     64-bit integer constant
n32     32-bit floating point constant
n64     64-bit floating point constant
si      Strings table index, 32 bits unsigned
sci     Serialization Context object table index, 16 bits unsigned
csi     Callsite table index, 16 bits unsigned
ins     Instruction offset from frame start (for goto), 32 bits unsigned

Note that this ensures we always keep at least 16-bit alignment for ops.

Some instructions place demands on the type of value in the register. This is perhaps most noticable when it comes to integers of different sizes; all computations are done on them in full-width (64-bit) form, and loading/storing them to registers representing locals of more constrained sizes needs explict sign extension and truncate ops. Wherever a register is specified, the kind of value in it is also indicated. These are typechecked once, either at bytecode load time or (perhaps better) on the first execution. After that, all future interpreter executions can just plow through the instructions without ever having to do checks.

The set of ops is listed in src/core/oplist.

Annotation segment

This consists of a number of records, composed of:

  • 32-bit unsigned integer offset into the bytecode segment
  • 32-bit unsigned integer strings heap index (filename)
  • 32-bit unsigned integer (line number)
+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/exceptions.markdown

Exceptions

Exceptions in MoarVM need to handle a range of cases. There exist both control exceptions (last/next/redo) where we want to reach the handler in the most expedient way possible, unwinding the stack as we go, and probably just do a goto instruction. In these cases, we don't expect to need any kind of exception object. At the other end of the scale, there are Perl 6 exceptions. These want to run the handler in the dynamic scope of the exception, and potentially resume rather than unwinding. These differences are properties of the handler rather than the exception; a CONTROL is interested in being run on the stack top when a "next" reaches it, whereas a while loop's handler for that just wants control delivered to the appropriate place.

Handlers

Handlers are associated with (static) frames. A handler consists of:

  • The start of the protected region (an offset from the frame's bytecode start)
  • The end of the protected region (an offset from the frame's bytecode start)
  • An exception category filter:
    • 1 = Catch Exception
    • 2 = Control Exception
    • 4 = Next
    • 8 = Redo
    • 16 = Last
    • 32 = Return
    • 64 = Unwind (triggers if we unwind out of it due to an exception being thrown; normal block exits do not cause this)
  • A handler action
    • 0 = Unwind any required frames, then goto the specified address. It is not possible to get any exception object or do any kind of rethrow.
    • 1 = Unwind any required frames, then goto the specified address. An exception object is available. This kind of handler leaves a handler record active on the stack, which the handler should remove by doing a rethrow or making the exception handled.
    • 2 = Invoke the specified block, and unwind unless it chooses to resume. Once the block returns, the handler is over.
  • In the case of a goto address handler, the offset of the handler
  • In the case of a block handler, the register in the frame that holds the block to invoke. The block should take no parameters.

A bitwise and between the category filter and the category of the exception being thrown is used to check if the handler is applicable.

Note that an Unwind handler is never actually set as the category of an exception; these are just for triggering actions during unwinds due to other exceptions. In the case of an unwind handler, the current exception is thus the one to blame for the unwinding. It is expected that an unwind handler will always rethrow once it's done what is needed.

Handler representation in MAST

The MAST::HandlerScope node indicates the instructions covered by handler and details of the kind of handler it is. See the MAST node definitions for more.

Handler representation in bytecode

Handlers are stored per frame and listed in a table. It is important that more deeply nested handlers appear in the table earlier than those lexically outer to them. This is really a job for the MAST to Bytecode compiler, since the MAST encodes the structure as nested nodes. Really, though, it's just a case of writing an entry into the frame's table after the node has been processed. See the bytecode specification for details.

Exception Objects

Some opcodes exist for creating exception objects and working with them. An exception object is anything with the VMException representation. Note that most HLLs will wish to attach their own objects as the payload.

exception w(obj)

Gets the exception currently being handled. Only valid in the scope of handler.

handled r(obj)

Marks the specified exception as handled. Only valid in the scope of a handler for the specified exception. Also, only required for goto handlers that also include an exception object.

newexception w(obj)

Creates a new exception object, based on the current HLL's configured exception type object or using BOOTException otherwise. By default it has an empty message and a category of 1 (a catch exception).

bindexmessage r(obj), r(str)

Sets the exception object's string message.

bindexpayload r(obj), r(obj)

Sets the exception object's payload (some other object).

bindexcategory r(obj), r(int64)

Sets the exception object's category

getexmessage w(str), r(obj)

Gets the exception object's string message.

getexpayload W(obj), r(obj)

Gets the exception object's payload.

getexcategory w(int64), r(obj)

Gets the exception object's category

Throwing Exceptions

There are various instructions for throwing a new exception object.

throwdyn w(obj) r(obj)
throwlex w(obj) r(obj)
throwlexotic w(obj) r(obj)

There are also instructions for throwing a particular category of exception without first creating an exception object.

throwcatdyn w(obj) int64
throwcatlex w(obj) int64
throwcatlexotic w(obj) int64

These will only produce an exception object for handlers that need it. The object that is produced will have a null message and payload, so only its category will be of interest. These are mostly intended for control exceptions.

Finally, for convenience, there is also:

die w(obj) r(str)

Which creates a catch exception with a string message and throws it.

One may wonder why all of these throw instructions take a register to write into. This is because a handler that invokes in the dynamic scope of the throw has the option to prevent stack unwinding by instead indicating that execution be resumed. When it does so, it specifies an argument for the resumption; this argument is then written into the register should resumption take place.

As for the dyn/lex/lexotic difference:

  • dyn means "search caller"
  • lex means "search outer", with the caveat that the outer must also be on the caller chain too
  • lexotic combines the two; for each entry in the dynamic scope, we scan all outers from that point; note that such an outer should also be in the call chain

Rethrowing

Sometimes, a handler may want to look at an exception, see if it's what it expects to handle, and if not pass it along as if the handler never saw it. This is the job of rethrow. A rethrow may only be used on the exception currently being handled. It is a simple instruction:

rethrow

Since it's always about the exception for the current handler, there's no need to say what should be rethrown.

Goto handlers that access exception objects and may rethrow

A goto handler that is allowed to get the exception object and/or rethrow it must mark the point they consider the handler over in the case they do not rethrow. The op for this is simply:

handled r(obj)

Note that if, while the handler is active, another exception is thrown and unwinds the stack past this handler, that's fine.

Overall mechanism

A stack of current handlers is maintained. Note that this is handlers we've actually invoked as the result of an exception being thrown (there may be many handler scopes that we are in, but only those that are presently handling exceptions get an entry on the stack).

When we search for handlers to invoke, any active handler is automatically skipped, so that a handler can never catch an exception thrown within it. Otherwise, you can easily imagine a mass of hangs.

When an exception is thrown, some pieces of information are initially needed:

  • The category, CAT
  • The exception object, OBJ
  • How to search (dyn, lex, lexotic), MODE
  • The current scope, SCOPE
  • The curent thread's active handler stack, HSTACK

Here is the overall algorithm in pseudo-code.

XXX TODO: Finish this up. :-)

search_frame_handlers(f, cat):
    for h in f.handlers
        if h.category_mask & cat
            if f.pc >= h.from && f.pc < h.to
                if !in_handler_stack(HSTACK, h)
                    return h
    return NULL
search_for_handler_from(f, mode, cat)
    if mode == LEXOTIC
        while f != NULL
            h = search_for_handler_from(f, LEX, cat)
            if h != NULL
                return h
            f = f.caller
    else
        while f != NULL
            h = search_frame_handlers(f, cat)
            if h != NULL
                return h
            if mode == DYN
                f = f.caller
            else if f == LEX
                f_maybe = f.outer
                while f_maybe != NULL && !is_in_caller_chain(f, f_maybe)
                    f_maybe = f_maybe.outer
                f = f_maybe
return NULL
run_handler(h, target_scope)
    if h.mode == 0
        unwind_to(target_scope)
        pc = h.goto
        return_to_runloop
    if h.mode == 1
        unwind_to(target_scope)
        pc = h.goto
        push_handler(h, target_scope)
        return_to_runloop
    if h.mode == 2
        unwind_to(target_scope)
        push_handler(h, target_scope)
        SCOPE.return_special = ...
        SCOPE.return_special_data = ...
        invoke(get_reg(target_scope, h.local_idx))
        return_to_runloop
    if h.mode == 3
        push_handler(h, target_scope)
        SCOPE.return_special = ...
        SCOPE.return_special_data = ...
        invoke(get_reg(target_scope, h.local_idx))
        return_to_runloop
panic_unhandled(scope, obj):
    note "Unahndled exception: " + obj.message
    note backtrace(scope)
    exit 1
panic_unhandled_cat(scope, cat):
    note "Unahndled exception of category " + category_name(cat)
    note backtrace(scope)
    exit 1
throw(mode):
    (h, target_scope) = search_for_handler_from(SCOPE, mode, CAT)
    if h == NULL
        panic_unhandled_cat(SCOPE, CAT)
    run_handler_(h, target_scope, obj)
throwcat(mode):
    (h, target_scope) = search_for_handler_from(SCOPE, mode, CAT)
    if h == NULL
        panic_unhandled_cat(SCOPE, CAT)
    run_handler_(h, target_scope, NULL)
handled():
    HSTACK.pop()
+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/extops.markdown

Extensions and Extension Ops [proposed/tentative]

The MoarVM Opcodes Overview

The MoarVM interpreter uses 16-bit opcodes. There are currently around 470 built-in ops, and it'll probably be around 500 once Rakudo's bootstrapped and passing spectest. The interpreter loop currently dispatches by op number, either using switch/case or cgoto where available.

Many opcodes are self-contained (they don't call other C functions, and some don't even make system calls), but lots and lots of them do call functions. Since the ./moar binary is statically-linked (mostly), the link-time code generation and optimization by modern compilers should do a pretty good job of making such things optimal [please excuse the truism]. However, in the case of dynamically loaded extensions to the VM that need to dynamically load native libraries with a C ABI (nearly all native libraries have a build that exposes such a thing), the function pointers must be resolved at runtime after the library is loaded. Perl 6's NativeCall module can load libraries by name and enumerate/locate entry points and functions by name.

I propose to use the dyncall functionality to load MoarVM extensions and resolve function pointers. The following is a draft design/spec doc for how that might look:


Representing Extension Op Calls on Disk and in Memory

In a table in the .moarvm disk representation of the bytecode, each extension op invoked from that compilation unit has an entry with: 1. a (16-bit) index into the string heap representing the fully-qualified (namespace included) name of the op, and 2. the op signature, a byte for each operand, zer-padded to 8 bytes. In the in-memory (deserialized) representation of the compilation unit, each record also has room to store the cache of the function pointer representing the C function to which the op was resolved. Each distinct op called from that compilation unit is encoded in the executable bytecode as its index in the extension op table plus 1024 (the first 1024 being reserved for MoarVM itself).

Loading Code That Calls Extension Ops

During bytecode validation (on-demand upon first invocation of a frame), when the validator comes across an opcode >= 1024, it subtracts 1024 and checks that the resulting index is less than the number of extension op calls proscribed by the compunit. Then it gets that extop call record (MVMExtOpCall) from the table, and if the record has a function pointer, it calls it with the sole arg (MVMThreadContext tc). If the function call slot is NULL, it means the function pointer hasn't been resolved for this compunit, but also that the signature hasn't yet been validated against the version of that opcode that was loaded by its dependencies (if it was!). First the validator does a hash lookup to check whether the extop has been loaded at all (this requires a mutex protection, unless we're by then using a lock-free HLL hash for this), then if it hasn't, it throws a bytecode validation exception. If it has been loaded (by itself or by a dependency), it compares the signatures of the call in the compunit whose frame is being validated against the signature of the loaded op by that name, and if they don't match, throw a bytecode validation exception: "extension op call signature mismatch - the op's old signature (xxxx) was deprecated? You tried to load a call with signature ." If the signatures matched, operand type validation of the actual passed parameters (register indexes) proceeds normally, using the extop's signature. The validator copies the function pointer from the process-wide registry into the in-memory record of the extop call in that compunit.

Loading Extensions

When a compilation unit is loaded, its "load" entry point routine calls its INIT block (if it has one), which does something like the example below, registering the native function pointers and their signatures with the runtime. It communicates with the runtime via the currently-compiling compiler (as there is generally a World-aware HLL compiler calling ModuleLoader). To start, it simply uses NativeCall to fetch each function pointer (but there are plenty of optimization opportunities there).

Examples

The below example purports to show the contents of a skeleton extension as it would look to a developer. (please excuse incorrect syntax; it's pseudo- code in some places. ;)

helper package (part of the MoarVM/NQP runtime) - MoarVM/CustomOps.p6:

```Perl6 package MoarVM::CustomOps; use NativeCall;

If we're compiling the innermost layer (and not just loading it at INIT time)

at compile-time of the compilation unit surrounding the INIT block we

assume we are in, inject the symbol into the innermost World outside of us.

ALSO, do the same thing at INIT-time (using nqp::extop_install) when we have

already been compiled, as well as when we're compiling.

sub install_ops($library_file, $c_prefix, $op_prefix, $names_sigs) is export { my $world = nqp::hllcompilerworld; my $opslib = native_lib($library_file); -> $name, $sig { my $fqon = "$op_prefix::$name"; nqp::extop_install($opslib, $fqon, "$c_prefix$name", $sig); $world.extop_compile($fqon, $sig) if $world.is_compiling; } for $names_sigs; } ```

Above, the nqp::hllcompilerworld op simply retrieves an appropriately named dynamic lexical of the current in-flight World object. That class will have an HLL method named extop_compile, detailed below.

Notice the helper package uses NativeCall to find the function pointers via the native_function (or whatever it's named) routine. When each function pointer is passed to the extop_compile method of the in-flight World object, that method in the HLL compiler will pass the function pointer to a special internal opcode (nqp::extop_install) that takes the NativeCall library object, the fully qualified name of the op as it will appear in the HLL source code (namespace ::opname), and a string representing the register signature, so the bytecode validator knows how to validate its register args.

```Perl6 class World { # NQP snippet

at compile-time of the compilation unit surrounding the INIT block

we assume we are in, inject the symbol into the innermost World outside of

us.

method extop_compile($fqon, $addr, $sig) { my $cu := self.current_compunit; my %extops := $cu.extop_calls; nqp::die("op $fqon already installed!") if nqp::has_key(%extops, $fqon); nqp::push($cu.extop_table, $fqon); %extops{$fqon} := $cu.next_extop++; } ```

Since the custom ops are resolved "by name" (sort of) upon bytecode loading, we don't have to worry about Rakudo bootstrapping, since in order to install the custom ops for Rakudo, we can simply rely on the compiler (in NQP) to generate the appropriate loading/installing code.

core/bytecode.c excerpt - nqp::extop_install:

```C

include "moar.h"

typedef struct _MVMExtOpRecord {

/* name of the op, including namespace:: prefix */
MVMString *opname;
/* string representing signature */
MVMString *signature;
/* the function pointer (see below for signature/macro) */
MVMCustomOp *function_ptr;
/* number of bytes the interpreter should advance the cur_op pointer */
MVMint32 op_size;
/* (speculative/future) function pointer to the code in C
    that the JIT can call to generate an AST for the
    operation, for super-ultra-awesome optimization
    possibilities (when pigs fly! ;) */
/* MVMCustomOpJITtoMAST * jittomast_ptr; */
/* so the record can be in a hash too (so a compiler or JIT
    can access the upper code at runtime in order to inline
    or optimize stuff) */
UT_hash_handle hash_handle;

} MVMExtOpRecord;

/ Resolve the function pointer and nstall the op at runtime. / void MVM_bytecode_extop_install(MVMThreadContext tc, MVMObject library, MVMString opname, MVMString funcname, MVMString *signature) {

/* TODO: protect with a mutex */
/* must also grab thread creation mutex b/c we have to
   update the tc->interp_customops pointer of all the threads */
MVMCustomOp *function_ptr = NULL;
MVMExtOpRecord *customops, *customop;
MVMuint16 opidx = tc->instance->nextcustomop++;
void *kdata;
size_t klen;
MVM_HASH_GET(tc, tc->instance->customops_hash, opname, customop);
if (customop)
    MVM_panic(tc, "already installed custom op by this name");
customops = tc->instance->customops;
if (customops == NULL) {
    customops = tc->instance->customops =
        calloc( sizeof(MVMExtOpRecord),
            (tc->instance->customops_size = 256));
}
else if (opidx == tc->instance->customops_size) {
    customops = tc->instance->customops =
        realloc(tc->instance->customops,
            (tc->instance->customops_size *= 2));
    memset(tc->instance->customops + tc->instance->customops_size/2,
        0, tc->instance->customops_size / 2 * sizeof(MVMExtOpRecord));
}
customop = customops + opidx;
customop->opname = opname;
customop->signature = signature;
customop->op_size = MVM_bytecode_extop_compute_opsize(tc, signature);
/* use the NativeCall API directly to grab the function pointer
   using the cached library object */
customop->function_ptr =
    MVM_nativecall_function_ptr(tc, library, funcname);
/* the name strings should always be in a string heap already,
   so don't need GC root */
HASH_ADD_KEYPTR(hash_handle, tc->instance->customops_hash, kdata, klen,
        customop);

} ```

core/interp.c excerpt - the invocation of nqp::customopcall's replacements:

```C MVMExtOpRecord *customops = tc->instance->customops; tc->interp_customops = &customops;

define EXTOP_OFFSET 4096

case MVM_OP_BANK_16: case MVM_OP_BANK_17: ... case MVM_OP_BANK_126: case MVM_OP_BANK_127: { MVMExtOpRecord op_record = &customops[(MVMuint16 )cur_op++ - EXTOP_OFFSET]; MVMCustomOp function_ptr = op_record->function_ptr; function_ptr(tc); cur_op += op_record->op_size; break; } ```

example extension (loading the rakudo ops dynamically) - Rakudo/Ops.p6 (or NQP):

```Perl package Rakudo::Ops;

INIT { use MoarVM::CustomOps; install_ops('rakudo_ops.lib', 'MVM_rakudo_op_', 'rakudo', [ 'additivitation', 'iii', 'concatenationize', 'sss', ]); }

Both at compile-time and run-time of the below code, INIT will have run

and the following ops are installed the right namespaces and such.

my $z = rakudo::concatenationize(rakudo::additivitation(44, 66), "blah");

note: since the types of the custom ops' operands are known to the

HLL compiler, it just does its normal thing of generating code to

auto-coerce the resulting integer from the addition to a string

for the concat custom op.

```

moar.h excerpt (note the injecting of 1 offset if it's not the result reg):

```C

define REG(idx) \

(reg_base[*((MVMuint16 *)(cur_op + ((idx) > 0 ? idx + 1 : 0)))])

```

Note: The type checks should be compile-time optimized-away by all but the stupidest of C compilers. Though they fail at runtime, I consider that "fail fast" enough, as this is simply a best-effort attempt at a coder convenience type-check, not a rigorous one to actually enforce that the register type signature passed to the runtime opcode installation routine in the HLL code actually matches the one defined/used in the C source code.

moar.h excerpt (continued):

```C

define MVM_CUSTOM_OP(opname, block) \

\ void opname(MVMThreadContext tc) { \ MVMuint8 cur_op = tc->interp_cur_op; \ MVMRegister reg_base = tc->interp_reg_base; \ MVMCompUnit cu = tc->interp_cu; \ block; \ } typedef MVM_CUSTOM_OP((MVMCustomOp)); ```

rakudo_ops.c

```C

include "moar.h"

MVM_CUSTOM_OP(MVM_rakudo_op_additivitation, { REG(0).i = REG(1).i + REG(2).i; })

MVM_CUSTOM_OP(MVM_rakudo_op_concatenationize, { REG(0).s = MVM_string_concatenate(tc, REG(1).s, REG(2).s); }) ```

validation.c excerpt (verify extop arg types and inline the real oprecord offsets):

C /* similar to the actual interpreter, grab the MVMExtOpRecord, but simply validate each operand type specified for the extop with the types and count of the registers specified in the bytecode, by enumerating each character in the signature. If it hasn't been checked already, compare the signature of the loaded extop by that name against the signature of the extop by that name that was stored in the compilation unit when it was loaded from disk, if it was. Cache the function pointer if it wasn't already. */

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/gc.markdown

Garbage Collection in MoarVM

Garbage collection in MoarVM can be characterized as:

  • Generational (two generations, the young one being know as the nursery)
  • Parallel (multiple threads may participate in GC)
  • Semi-space copying (only in the young generation)
  • Stop the world (all threads are paused while collection takes place)
  • Precise (we always know what is a pointer and what is not)

Finalization calls to free non-garbage-collectable resources happen asynchronously with mutator execution.

Thread Locality

Every thread has its own semi-space nursery and generation 2 size-separated area. This is so it can do bump-pointer allocation and promotion to gen-2 without the need for synchronization during execution, and also as most objects will be thread-local. This doesn't mean objects cannot be accessed by other threads or have their only living reference known just by an object in another thread's memory space.

How Objects Support Collection

Each object has space for flags, some of which are used for GC-related purposes. Additionally, objects all have space for a forwarding pointer, which is used by the GC as it goes about copying.

How Collection Is Started

For collection to begin, all threads must be paused. The thread that wishes to initiate a collection races to set the in_gc flag in the MVM_Instance struct. If it succeeds, it then visits all other threads and flags that they must suspend execution and do a GC run. If it fails, then it was at a GC-safe point anyway, so it just waits for everyone else to be.

At each GC-safe point, threads check in their thread-context struct to see if a GC run needs to be started. It indicates that it has paused, and then proceeds to add any relevant thread-local roots to the thread's work list. Note that any roots that could possibly be touched by another thread must NOT be scanned at this point, as another mutator thread could still be running and modify them, creating potential for lost references.

Once all threads indicate they have stopped execution, the GC run can go ahead.

Nursery Collections

Processing the worklist involves:

  • Taking an item from the list (where an item is a pointer to an object reference, that is an MVMCollectable **, not just an MVMCollectable *)
  • Ensuring it didn't already get copied; if so, just update the pointer to the new address of the object
  • Seeing if it belongs to another thread, and if so putting it into a worklist for whatever thread is processing the allocating thread's GC, and continuing to the next item
  • If it has survived a previous nursery collection, move it into the older generation
  • Otherwise, copy it to tospace
  • Update the pointer to point to the new location of the object
  • Scanning the object and putting any object references that were not yet marked into the worklist

Full Collections

Every so often there will be a full collection, and generation 2 will be collected as well as the nursery. This is determined by looking at the amount of memory that has been promoted to generation 2 relative to the overall heap size, and possibly other factors (this has been tuned over time and will doubtless be tuned more; see the code).

Write Barrier

All writes into an object in the second generation from an object in the nursery must be added to a remembered set. This is done through a write barrier.

MVMROOT

Being able to move objects relies on being able to find and update all of the references to them. And, since MoarVM is written in C, that includes those references on the C stack. Consider this bit of code, which is the (general, unoptimized) path for boxing strings:

MVMObject * MVM_repr_box_str(
    MVMThreadContext *tc,
    MVMObject *type,
    MVMString *val
) {
    MVMObject *res;
    MVMROOT(tc, val, {
        res = MVM_repr_alloc_init(tc, type);
        MVM_repr_set_str(tc, res, val);
    });
    return res;
}

It receives val, which is a string to box. Note that strings are garbage- collectable objects in MoarVM, and so may move. It then allocates a box of the specified type (for example, Perl 6’s Str), and puts the string inside of it. Since MVM_repr_alloc_init allocates an object, it may trigger garbage collection. And that in turn may move the object pointed to by val – meaning that the val pointer needs updating. The MVMROOT macro is used in order to add the memory address of val on the C stack to the set of roots that the GC considers and updates, thus ensuring that even if the allocation of the box triggers garbage collection, this code won’t end up with an old val pointer.

There is also an MVMROOT2, MVMROOT3, and MVMROOT4 macro to root 2, 3, or 4 things at once, which saves an indentation level (and possibly a little work, but C compilers are probably smart enough these days for it not to matter).

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/interpreter.markdown

MoarVM Intepreter

Ops and Op Banks

The interpreter first dispatches on op bank, then on the code within that. For the core and primitive operations, that is done through a switch that is inlined directly inside of the interpreter.

The list of ops is held in src/core/oplist. This is processed by the tools/update_ops_h.p6 tool to generate src/core/ops.h and ops.c, which contain all of the metadata about the operations and operation banks.

Nested Runloops - Just Say No

There is no notion of "nested runloop"; any call into C land that wants to call back into the interpreter must persist enough information to allow it to continue its work later. It does this by saving that info into a frame and specifying a callback to resume the work. In essence, it needs to be written out as a state machine. That state machine will be called back into when a C frame is returned to. This is not particularly fun. Nested runloops and continuation barrier issues are even less fun, though.

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/README.md

Documentation

Current Docs

The below linked documents are current.

Strings

String Representation Overview

Collation

JIT

JIT compiler overview

Expression 'Tree' Intermediate Representation

Runtime Configuration

JIT Todo

Other

MoarVM Release Guide

Changelog

Historical Design Docs

The other documents are mostly of historical interest for the heavy design phases of MoarVM, but may also be useful for understanding its current operation.

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/debug-server-protocol.md

MoarVM Remote Debug Protocol Design

The MoarVM Remote Debug Protocol is used to control a MoarVM instance over a socket, for the purposes of debugging. The VM must have been started in debug mode for this capability to be available. This document defines the debug protocol's wire format.

The wire format

Rather than invent Yet Another Custom Binary Protocol, the MoarVM remote debug protocol uses MessagePack. This has the advantage of easy future extensibility and existing support from other languages.

The only thing that is not MessagePack is the initial handshake, leaving the freedom to move away from MessagePack in a future version, should there ever be cause to do so.

Since MessagePack is largely just a more compact way to specify JSON, all of the messages in this document are demonstrated with JSON syntax. This is just for ease of reading; JSON is not used at all on the wire.

Initial Handshake

Upon receving a connection, MoarVM will immediately send the following 24 bytes if it is willing and able to accept the connection:

  • The string "MOARVM-REMOTE-DEBUG\0" encoded in ASCII
  • A big endian, unsigned, 16-bit major protocol version number
  • A big endian, unsigned, 16-bit minor protocol version number

Otherwise, it will send the following response, explaining why it cannot, and then close the connection:

  • The string "MOARVM-REMOTE-DEBUG!" encoded in ASCII
  • A big endian, unsigned, 16-bit length for an error string explaining the rejection (length in bytes)
  • The error string, encoded in UTF-8

A client that receives anything other than a response of this form must close the connection and report an error. A client that receives an error response must report the error.

Otherwise, the client should check if it is able to support the version of the protocol that the server speaks. The onus is on clients to support multiple versions of the protocol should the need arise. See versioning below for more. If the client does not wish to proceed, it should simply close the connection.

If the client is statisfied with the version, it should send:

  • The string "MOARVM-REMOTE-CLIENT-OK\0" encoded in ASCII

For the versions of the protocol defined in this document, all further communication will be in terms of MessagePack messages.

MessagePack envelope

Every exchange using MessagePack must be an object at the top level. The object must always have the following keys:

  • type, which must have an integer value. This specifies the type of the message. Failing to include this field or failing to have its value be an integer is a protocol error, and any side receiving such a message should terminate the connection.
  • id, which must have an integer value. This is used to associate a response with a request, where required. Any interaction initiated by the client should have an odd id, starting from 1. Any interaction initiated by the server should have an even id, starting from 2.

The object may contain further keys, which will be determined by message type.

Versioning

Backwards-incompatible changes, if needed, will be made by incrementing the major version number. A client seeing a major version number it does not recognize or support must close the connection and not attempt any further interaction, and report an error.

The minor version number is incremented for backwards-compatible changes. A client may proceed safely with a higher minor version number of the protocol than it knows about. However, it should be prepared to accept and disregard message types that it does not recognize, as well as any keys in an object (encoded using MessagePack) that it does not recognize.

The client can use the minor version number to understand what features are supported by the remote MoarVM instance.

The MoarVM instance must disregard keys in a MessagePack object that it does not understand. For message types that it does not recognize, it must send a message of type "not recognized" (format defined below); the connection should be left intact by MoarVM, and the client can decide how to proceed.

Security considerations

Any client connected to the debug protocol will be able to perform remote code execution using the running MoarVM instance. Therefore, MoarVM must only bind to localhost by default. It may expose an option to bind to further interfaces, but should display a warning about the dangers of this option.

Remote debugging should be performed by establishing a secure tunnel from the client to the server, for example using SSH port forwarding. This provides both authentication and protection against tampering with messages.

Message types

All messages defined here, unless stated otherwise, are supported in major version 1, minor version 0, of the protocol (also known as 1.0).

Message Type Not Understood (0)

Sent only by MoarVM to indicate that a message type was not understood. The ID correlates it with the message that was not understood.

{
    "type": 0,
    "id": $id
}

Error Processing Message (1)

Sent only by MoarVM to indicate that a problem occurred with processing a message. The ID correlates it with the message that was not understood. This should not be sent when a message type is recognized but the object lacks required keys, or when the requested operation could not be performed. The reason key should be a string explaining why.

{
    "type": 1,
    "id": $id,
    "reason": "Program already terminated"
}

Operation Successful (2)

This is a generic message sent by the MoarVM instance to acknowledge that an operation was successfully performed. This is sent in response to commands, when there is no further information to return. The ID correlates it with the message from the client that was successfully processed.

{
    "type": 2,
    "id": $id
}

Is Execution Suspended Request (3)

Sent by the client to ask the MoarVM instance if execution is currently suspended.

{
    "type": 3,
    "id": $id
}

Is Execution Suspended Response (4)

Response from the MoarVM instance, with the suspended key set to true if execution is currently suspended and false otherwise.

{
    "type": 4,
    "id": $id,
    "suspended": true
}

Suspend All (5)

Requests that all threads be suspended. Once this has happened, an Operation Successful message will be sent. If all threads were already suspended, then nothing happens and an Operation Successful message will be sent.

{
    "type": 5,
    "id": $id
}

Resume All (6)

Requests that all suspended threads be resumed. Once this has happened, an Operation Successful message will be sent. If no threads were suspended, then nothing happens and an Operation Successful message will be sent.

{
    "type": 6,
    "id": $id
}

Suspend One (7)

Requests that a specific thread be suspended, with the thread ID specified by the thread key. Once this has happened, an Operation Successful message will be sent. If the threads was already suspended, then nothing happens and an Operation Successful message will also be sent. An error will be reported if the thread ID is not recognized.

{
    "type": 7,
    "id": $id,
    "thread": 1
}

Resume One (8)

Requests that a specific thread be resumed, with the thread ID specified by the thread key. Once this has happened, an Operation Successful message will be sent. If the thread was not suspended, then nothing happens and an Operation Successful message will be sent.

{
    "type": 8,
    "id": $id,
    "thread": 1
}

Thread Started (9)

This message is sent by MoarVM whenever a new thread is started. The client can simply disregard it if it has no interest in this information.

{
    "type": 9,
    "id": $id,
    "thread": 3,
    "native_id": 1020,
    "app_lifetime": true
}

Thread Ended (10)

This message is sent by MoarVM whenever a thread terminates. The client can simply disregard it if it has no interest in this information.

{
    "type": 10,
    "id": $id,
    "thread": 3
}

Thread List Request (11)

This message is sent by the client to request a list of all threads, with some information about each one. This may be sent at any time, whether or not the threads are suspended.

{
    "type": 11,
    "id": $id
}

Thread List Response (12)

This message is sent as a response to a Thread List Request. It contains an array of objects, with one entry per running threads, providing information about that thread. It also contains an indication of whether the threads was suspended, and the number of locks it is currently holding.

{
    "type": 12,
    "id": $id,
    "threads": [
        {
            "thread": 1,
            "native_id": 1010,
            "app_lifetime": false,
            "suspended": true,
            "num_locks": 1
        },
        {
            "thread": 3,
            "native_id": 1020,
            "app_lifetime": true,
            "suspended": false,
            "num_locks": 0
        }
    ]
}

Thread Stack Trace Request (13)

This message is sent by the client to request the stack trace of a thread. This is only allowed if that thread is suspended; an error will be returned otherwise.

{
    "type": 13,
    "id": $id,
    "thread": 3
}

Thread Stack Trace Response (14)

This message is sent by MoarVM in response to a Thread Stack Trace Request. It contains an array of stack frames, topmost first, that are currently on the call stack of that thread. Each stack frame is represented by an object. The bytecode_file key will be either a string or nil if the bytecode only exists "in memory" (for example, due to an EVAL). The name key will be an empty string in the case that the code for that frame has no name. The type field is the debug name of the type of the code object, or nil if there is none.

{
    "type": 14,
    "id": $id,
    "frames": [
        {
            "file": "path/to/source/file",
            "line": 22,
            "bytecode_file": "path/to/bytecode/file",
            "name": "some-method",
            "type": "Method" 
        },
        {
            "file": "path/to/source/file",
            "line": 12,
            "bytecode_file": "path/to/bytecode/file",
            "name": "",
            "type": "Block" 
        },
        {
            "file": "path/to/another/source/file",
            "line": 123,
            "bytecode_file": "path/to/another/bytecode/file",
            "name": "foo",
            "type": nil
        }
    ]
}

Set Breakpoint Request (15)

Sent by the client to set a breakpoint at the specified location, or the closest possible location to it. The file refers to the source file. If suspend is set to true then execution of all threads will be suspended when the breakpoint is hit. In either case, the client will be notified. The use of non-suspend breakpoints is for simply counting the number of times a certain point is crossed. If the stacktrace option is set to true then a stack trace of the location where the breakpoint was hit will be included. This can be used both with and without suspend; with suspend it can save an extra round-trip to reqeust the stack location, while without suspend it can be useful for features like "capture a stack trace every time foo is called".

{
    "type": 15,
    "id": $id,
    "file": "path/to/source/file",
    "line": 123,
    "suspend": true,
    "stacktrace": false
}

Set Breakpoint Confirmation (16)

Sent by MoarVM to confirm that a breakpoint has been set. The line key indicates the actual line that the breakpoint was placed on, if there was no exactly annotation match. This message must be sent before any breakpoint notifications; the ID will match the breakpoint request.

{
    "type": 16,
    "id": $id,
    "line": 123
}

Breakpoint Notification (17)

Sent by MoarVM whenever a breakpoint is hit. The ID will match that of the breakpoint request. The frames key will be nil if the stacktrace key of the breakpoint request was false. Otherwise, it will contain an arrary of objects describing the stack frames, formatted as in the Thread Stack Trace Response message type.

{
    "type": 17,
    "id": $id,
    "thread": 1,
    "frames": nil
}

Clear Breakpoint (18)

Clears a breakpoint. The line number must be the one the breakpoint was really set on (indicated in the Set Breakpoint Confirmation message). After clearing the breakpoint, MoarVM will send an Operation Successful response.

{
    "type": 18,
    "id": $id,
    "file": "path/to/source/file",
    "line": 123
}

Clear All Breakpoints (19)

Clears all breakpoints that have been set. Once they have been cleared, MoarVM will respond with an Operation Successful message.

{
    "type": 19,
    "id": $id
}

Single Step (aka. Step Into) (20)

Runs until the next program point, where program points are determined by either a change of frame or a change of line number in the bytecode annotation table. The thread this is invoked on must be suspended, and will be returned to suspended state after the step has taken place. A Step Completed message will be sent by MoarVM at that point.

{
    "type": 20,
    "id": $id,
    "thread": 1
}

Step Over (21)

Runs until the next program point either in the same frame or in a calling frame, but not in any called frames below this point. The thread this is invoked on must be suspended, and will be returned to suspended state after the step has taken place. A Step Completed message will be sent by MoarVM at that point.

{
    "type": 21,
    "id": $id,
    "thread": 1
}

Step Out (22)

Runs until the program returns into the specified frame. The thread this is invoked on must be suspended, and will be returned to suspended state after the step has taken place. A Step Completed message will be sent by MoarVM at that point.

The client has to specify the frame to return to, because whether a calling frame should be skipped or not depends on whether it is a Block or Routine or similar. The client has to have this knowledge.

{
    "type": 22,
    "id": $id,
    "thread": 1,
    "frame": 4321
}

Step Completed (23)

Sent by MoarVM to acknowledge that a stepping operation was completed. The ID matches that of the step request. The frames array contains the stacktrace after stepping; the file and line of the current location being in the topmost frame.

{
    "type": 23,
    "id": $id,
    "thread": 1,
    "frames": [
        ...
    ]
}

Release Handles (24)

Handles are integers that are mapped to an object living inside of the VM. For so long as the handle is alive, the object will be kept alive by being in the handles mapping table. Therefore, it is important that, when using any instructions that involve handles, they are released afterwards. Otherwise, the debug client can induce a managed memory leak. This command is confirmed with an Operation Successful message.

{
    "type": 24,
    "id": $id,
    "handles": [42, 100]
}

Handle Result (25)

This is a common response message send by MoarVM for requests that ask for an object handle. The ID will match that of the request. Remember to release handles when the debug client no longer needs them by sending a Release Handles message. The 0 handle represents the VM Null value.

{
    "type": 25,
    "id": $id,
    "handle": 42
}

Context Handle (26)

Sent by the client to allocate a context object handle for the specified frame (indicated by the depth relative to the topmost frame on the callstack, which is frame 0) and thread. This can only be used on a thread that is suspended. A context handle is just an object handle, where the object happens to have the MVMContext REPR, and the result is delivered as a Handle Result message.

{
    "type": 26,
    "id": $id,
    "thread": 1,
    "frame": 0
}

Context Lexicals Request (27)

Sent by the client to request the values of lexicals in a given context. The handle key must be a context handle. The response comes as a Context Lexicals Response message.

{
    "type": 27,
    "id": $id,
    "handle": 1234
}

Context Lexicals Respone (28)

Contains the results of introspecting a context. For natively typed values, the value is included directly in the response. For object lexicals, an object handle will be allocated for each one. This will allow for further introspection of the object; take care to release it. The debug name of the type is directly included, along with whether it's concrete (as opposed to a type object) and a container type that could be decontainerized. The kind key may be one of obj, int, num, or str.

{
    "type": 28,
    "id": $id,
    "lexicals": {
        "$x": {
            "kind": "obj",
            "handle": 1234,
            "type": "Scalar",
            "concrete": true,
            "container": true
        },
        "$i": {
            "kind": "int",
            "value": 42
        },
        "$s": {
            "kind": "str",
            "value": "Bibimbap"
        }
    }
}

Outer Context Request (29)

Used by the client to gets a handle to the outer context of the one passed. A Handle Result message will be sent in response. The null handle (0) will be sent if there is no outer.

{
    "type": 29,
    "id": $id,
    "handle": 1234
}

Caller Context Request (30)

Used by the client to gets a handle to the outer context of the one passed. A Handle Result message will be sent in response. The null handle (0) will be returned if there is no caller.

{
    "type": 30,
    "id": $id,
    "handle": 1234
}

Code Object Handle (31)

Sent by the client to allocate a handle for the code object of the specified frame (indicated by the depth relative to the topmost frame on the callstack, which is frame 0) and thread. This can only be used on a thread that is suspended. If there is no high-level code object associated with the frame, then the null handle (0) will be returned. The response is delivered as a Handle Result message.

{
    "type": 31,
    "id": $id,
    "thread": 1,
    "frame": 0
}

Object Attributes Request (32)

Used by the client to introspect the attributes of an object. The response comes as an Object Attributes Response message.

{
    "type": 32,
    "id": $id,
    "handle": 1234
}

Object Attributes Response (33)

Contains the results of introspecting the attributes of an object. If the object cannot have any attributes, the attributes key will be an empty array. For natively typed attributes, the value is included directly in the response. For object attributes, an object handle will be allocated for each one. This will allow for further introspection of the object; take care to release it. The debug name of the type is directly included, along with whether it's concrete (as opposed to a type object) and a container type that could be decontainerized. The kind key may be one of obj, int, num, or str. Since attributes with the same name may exist at multiple inheritance levels, an array is returned with the debug name of the type at that level under the class key.

{
    "type": 33,
    "id": $id,
    "attributes": [
        {
            "name": "$!x",
            "class": "FooBase"
            "kind": "obj",
            "handle": 1234,
            "type": "Scalar",
            "concrete": true,
            "container": true
        },
        {
            "name": "$!i",
            "class": "Foo",
            "kind": "int",
            "value": 42
        }
    ]
}

Decontainerize Handle (34)

Used to decontainerize a value in a container (such as a Perl 6 Scalar). The handle to the object that results is returned in a Handle Result message. If this is not a container type, or if an exception occurs when trying to do the decontainerization, an Error Processing Message response will be sent by MoarVM instead. A target thread to perform this operation on is required, since it may be required to run code (such as a Proxy); the thread must be suspended at the point this request is issued, and will be returned to suspended state again after the decontainerization has taken place. Note that breakpoints may be hit and will be fired during this operation.

{
    "type": 34,
    "id": $id,
    "thread": 1,
    "handle": 1234
}

Find Method (35)

Used by the client to find a method on an object that it has a handle to. The handle to the method that results is returned in a Handle Result message, with the null object handle (0) indicating no method found. If an exception occurs when trying to do the method resolution, an Error Processing Message response will be sent by MoarVM instead. A target thread to perform this operation on is required, since it may be required to run code (such as find_method) in a custom meta-object); the thread must be suspended at the point this request is issued, and will be returned to suspended state again after the lookup has taken place. Note that breakpoints may be hit and will be fired during this operation.

{
    "type": 35,
    "id": $id,
    "thread": 1,
    "handle": 1234
}

Invoke (36)

Used by the client to invoke an object that it has a handle to, which should be some kind of code object. The arguments may be natives or other objects that the client has a handle for. The results will be returned in an Invoke Result message. A target thread to perform this operation on is required. The thread must be suspended at the point this request is issued, and will be returned to suspended state again after the lookup has taken place. Note that breakpoints may be hit and will be fired during this operation.

{
    "type": 36,
    "id": $id,
    "thread": 1,
    "handle": 1235,
    "arguments": [
        {
            "kind": "obj",
            "handle": 1234
        },
        {
            "kind": "str",
            "value": "Bulgogi"
        }
    ]
}

Invoke Result (37)

Contains the result of an Invoke message. If the result was of an object type then a handle to it will be returned. If the invoke resulted in an exception, then the crashed key will be set to a true value, and the result handle will point to the exception object instead. Object result example:

{
    "type": 37,
    "id": $id,
    "crashed": false,
    "kind": "obj",
    "handle": 1234,
    "type": "Int",
    "concrete": true,
    "container": false
}

Native int result example:

{
    "type": 37,
    "id": $id,
    "crashed": false,
    "kind": "int",
    "value": 42
}

Exception result:

{
    "type": 37,
    "id": $id,
    "crashed": true,
    "kind": "obj",
    "handle": 1234,
    "type": "X::AdHoc",
    "concrete": true,
    "container": false
}

Unhandled Exception (38)

This message is sent by MoarVM when an unhandled exception occurs. All threads will be suspended. A handle to the exception object is included, together with the thread it occurred on and the stack trace of that thread. So far as it is able to do so, MoarVM will allow operations such as introspecting the context, resolving methods, decontainerizing values, and invoking code.

{
    "type": 38,
    "id": $id,
    "thread": 1,
    "handle": 1234,
    "frames": [
        {
            "file": "path/to/source/file",
            "line": 22,
            "bytecode_file": "path/to/bytecode/file",
            "name": "some-method",
            "type": "Method" 
        },
        {
            "file": "path/to/source/file",
            "line": 12,
            "bytecode_file": "path/to/bytecode/file",
            "name": "",
            "type": "Block" 
        }
    ]
}

Operation Unsuccessful (39)

A generic message sent by MoarVM if something went wrong while handling a request.

{
    "type": 39,
    "id": $id
}

Object Metadata Request (40)

Used by the client to get additional information about an object that goes beyond its actual attributes. Can include miscellaneous details from the REPRData and the object's internal state if it's concrete.

Additionally, all objects that have positional, associative, or attribute features will point that out in their response.

{
    "type": 40,
    "id": $id,
    "handle": 1234
}

Object Metadata Response (41)

Contains the results of introspecting the metadata of an object.

Every object has reprname. All concrete objects have size and unmanaged_size fields.

Objects also include positional_elems and associative_elems for objects that have positional and/or associative features.

pos_features, ass_features, and attr_features inform the client which of the requests 42 ("Object Positionals Request"), 44 ("Object Associatives Request"), or 32 ("Object Attributes Request") will give useful results.

{
    "type": 41,
    "id": $id,
    "metadata": {
        "reprname": "VMArray",
        "size": 128,
        "unmanaged_size": 1024,
        "vmarray_slot_type": "num32",
        "vmarray_elem_size": 4,
        "vmarray_allocated": 128,
        "vmarray_offset": 40,
        "positional_elems": 12,
        "pos_features": true,
        "ass_features": false,
        "attr_features": false,
    },
}

Object Positionals Request (42)

Used by the client to get the contents of an object that has positional features, like an array.

{
    "type": 42,
    "id": $id
}

Object Positionals Response (43)

The kind field can be "int", "num", "str" for native arrays, or "obj" for object arrays.

In the case of an object array, every entry in the contents field will be a map with keys type, handle, concrete, and container.

For native arrays, the array contents are sent as their corresponding messagepack types.

Native contents:

{
    "type": 43,
    "id": $id,
    "kind": "int",
    "start": 0,
    "contents": [
        1, 2, 3, 4, 5, 6
    ]
}

Object contents:

{
    "type": 43,
    "id": $id,
    "kind": "obj",
    "start": 0,
    "contents": [
        {
            "type": "Potato",
            "handle": 9999,
            "concrete": true,
            "container": false
        },
        {
            "type": "Noodles",
            "handle": 10000,
            "concrete": false,
            "container": false
         }
     ]
 }

Associatives Request (44)

Used by the client to get the contents of an object that has associative features, like a hash.

{
    "type": 44,
    "id": $id,
    "handle": 12345
}

Associative Response (45)

{
    "type": 45,
    "id": $id,
    "kind": "obj"
    "contents": {
        "Hello": {
            "type": "Poodle",
            "handle": 4242,
            "concrete": true,
            "container": false
        },
        "Goodbye": {
            "type": "Poodle",
            "handle": 4242,
            "concrete": true,
            "container": false
        }
    }
}

Handle Equivalence Request (46)

Ask the debugserver to check if handles refer to the same object.

{
    "type": 46,
    "id": $id,
    "handles": [
        1, 2, 3, 4, 5, 6, 7
    ]
}

Handle equivalence Response (47)

For any object that is referred to by multiple handles from the request, return a list of all the handles that belong to the given object.

{
    "type": 47,
    "id": $id,
    "classes": [
        [1, 3],
        [2, 5, 7]
    ]
}
+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/release_guide.md

MoarVM Release Guide

Versions

MoarVM currently has a monthly release cycle, with releases made in time for the month's NQP and Rakudo release. Version numbers are simply YYYY.MM. For example, the January 2014 release is 2014.01. If any bugfix releases need to be made, they should be numbered as 2041.01.1, 2041.01.2, etc.

Making a release

  1. Make sure that you are on the MoarVM commit you want to make a release from, and that your status is clean.

  2. Ensure that NQP and Rakudo will build and that make test in each is clean. Also run make spectest in Rakudo; discuss any failures you see with the Rakudo developers.

  3. If possible, run NQP and Rakudo make test and Rakudo make spectest when #define MVM_DEBUG_NFG 1 and #define MVM_DEBUG_NFG_STRICT 1 in src/strings/ops.h after recompiling to make sure there have been no normalization bugs introduced.

  4. Update docs/ChangeLog with any significant changes since the previous release.

  5. Update the VERSION file with the release name.

  6. Run make release VERSION=2017.10, substituting the correct version name.

  7. Take the MoarVM-2017.10.tar.gz file generated by step 6, copy it to a separate directory, extract it, and then in that directory do:

    perl Configure.pl --prefix=install
    make install
    install/bin/moar --version
    
  8. Provided step 5 and 6 work, you have a release! You need to setup git to be able to sign your commits. The -a option adds a tag while the -s makes sure the tag is signed. Even if your commits are signed by default, you will need the -s option as well. Note: For the tag's message, in the past we have used: '2018.05 release'. To see the past release messages use git tag -n9

    git tag -as 2017.10
    
  9. Run git verify-tag 2017.10 to make sure the signature is valid and the tag was actually signed.

  10. Run git push origin 2017.10 assuming the upstream remote is origin to push the tag. Also ensure you git push origin to push to the master branch as well.

  11. From here on this assumes you have the https://github.com/MoarVM/moarvm.org/ repository in the same folder as the main MoarVM repo

  12. Make sure you have the Text::Markdown Perl 5 module and run:

    ./tools/moarvm.org_releases.pl > ../moarvm.org/releases.html
    

It should output to STDERR all the versions it found in ChangeLog make sure the most recent release appears first and all releases going back to 2014.01 appear.

  1. Manually edit moarvm.org/index.html to have the DL link and mention the most recent release. Changes need to be made on lines:
  2. 36: Large text
  3. 38: Description text
  4. 41: Download link

  5. Create a gpg signature

     gpg --detach-sign --armor MoarVM-2018.04.tar.gz
    

Verify the signature: gpg --verify MoarVM-2018.04.tar.gz.asc

  1. Copy the tar.gz and the signature:

     cp MoarVM-2018.04.tar.gz MoarVM-2018.04.tar.gz.asc ../moarvm.org/releases
    
  2. Commit release to moarvm.org repo and check moarvm.org after 5-10 minutes and make sure download works. cd ../moarvm.org git add MoarVM-2018.04.tar.gz MoarVM-2018.tar.gz.asc git commit -m "Commit release 2018.08"

  3. Update MoarVM article on Wikipedia with the latest release https://en.wikipedia.org/wiki/MoarVM

  4. Optionally, update the ports/macports/Portfile to reflect this latest version, and open a ticket at https://trac.macports.org/newticket to get the macport updated. (For now, just make Coke do it.)

  5. Do something fun to celebrate. Like watching nyan cat, or having a beer. Or why not both?

+ for F in docs/*.markdown docs/*.md + markdown_py-3 docs/reveal.md

MoarVM: A virtual machine for NQP and Rakudo

Over the course of the last year, we've been working to make both NQP and Rakudo more portable. This has primarily been done to enable the JVM porting work. While the JVM is an important platform to target, and initial work suggests it can give us a faster and more stable Rakudo, there are some use cases, or users, that the JVM will not cater to so well. Startup time will likely remain a little high for one-liners and quick scripts. Other potential users simply don't want to use the JVM, for whatever reason. That's fine: there's more than one way to do it, and our strategy has been to enable that by adding support for the JVM without breaking support for Parrot. Additionally, pmurias will be working on a JavaScript backend for a GSoC project.

Today I'd like to introduce some work that, all being well, will lead to an additional "way to do it" arriving over the next several months. A small team, composed of myself, diakopter, japhb and masak, have been quietly working on taking the design of the 6model object system and building a runtime around it. Thus, we've created the "Metamodel On A Runtime" Virtual Machine, or the "MOAR VM", which we've taken to writing as "MoarVM".

This is not a release announcement. At present, MoarVM runs neither NQP nor Rakudo, though a cross-compiler exists that allows translating and passing much of the NQP test suite. We're revealing it ahead of YAPC::NA, so it can be openly discussed by the Perl 6 team. The goal from the start has been to run NQP, then run Rakudo. The JVM porting work has established the set of steps that such an effort takes, namely:

  1. Build an NQP cross-compiler that targets the desired platform. Make it good enough to compile the MOP, built-ins and the classes at the heart of the regex/grammar engine. Make it pass most of the NQP test suite.
  2. Make the cross-compiler good enough to cross-compile NQP itself.
  3. Close the bootstrap loop, making NQP self host on the new platform.
  4. Do the Rakudo port.

At the moment, the JVM work is well into the final step. For MoarVM, we've reached the second step. That is to say, we already have a cross-compiler that compiles a substantial range of NQP language constructs into MoarVM bytecode, including the MOP, built-ins and regex-related classes. Around 51 of the NQP test files (out of a total of 62) pass. Work towards getting the rest of NQP to cross-compile is ongoing.

Since anybody who has read this far into the post probably has already got a whole bunch of questions, I'm going to write the rest of it in a question-and-answer style.

What are the main goals?

To create a VM backend for Rakudo Perl 6 that:

  • Is lightweight and focused on doing exactly what Rakudo needs, without any prior technical or domain debt to pay off.

  • Supports 6model and various other needs natively and, hopefully, efficiently.

  • Is a quick and easy build, with few dependencies. I was rather impressed with how quick LuaJIT can be built, and took that as an inspiration.

  • Enable the near-term exploration of JIT compilation in 6model (exploring this through invokedynamic on the JVM is already underway too).

What's on the inside?

So far, MoarVM has:

  • An implementation of 6model. In fact, the VM uses 6model as its core object system. Even strings, arrays and hashes are really 6model objects (which in reality means we have representations for arrays and hashes, which can be re-used by high-level types). This is the first time 6model has been built up from scratch without re-using existing VM data structures.

  • Enough in place to support a sizable subset of the nqp:: op space. The tests from the NQP test suite that can be translated by the cross-compiler cover a relatively diverse range of features: the boring easy stuff (variables, conditionals, loops, subs), OO stuff (classes, methods, roles, mixins, and, naturally, meta-programming), multiple dispatch, most of grammars (including LTM), and various other bits.

  • Unicode strings, designed with future NFG support in mind. The VM includes the Unicode Character Database, meaning that character name and property lookups, case changing and so forth can be supported without any external dependencies. Encoding of strings takes place only at the point of I/O or when a Buf rather than a Str is requested; the rest of the time, strings are opaque (we're working towards NFG and also ropes).

  • Precise, generational GC. The nursery is managed through semi-space copying, with objects that are seen a second time in the nursery being promoted to a second generation, which is broken up into sized heaps. Allocations in the nursery are thus "bump the pointer", the copying dealing with the resulting fragmentation.

  • Bytecode assembly done from an AST, not from a textual format. MoarVM has no textual assembly language or intermediate language. Of course, there's a way to dump bytecode to something human-readable for debugging, but nothing to go in the opposite direction. This saves us from producing text, only to parse it to produce bytecode.

  • IO and other platform stuff provided by the Apache Portable Runtime, big integer support provided by libtommath, and re-use of existing atomic ops and hash implementations. We will likely replace the APR with libuv in the future. The general principle is to re-use things that we're unlikely to be able to recreate ourselves to the same level of quality or on an acceptable time scale, enabling us to focus on the core domain.

What does this mean for the Rakudo on JVM work?

Relatively little. Being on the JVM is an important goal in its own right. The JVM has a great number of things in its favor: it's a mature, well-optimized, widely deployed technology, and in some organizations the platform of choice ("use what you like, so long as it runs on the JVM"). No matter how well Moar turns out, the JVM still has a couple of decades head start.

Additionally, a working NQP on JVM implementation and a fledgling Rakudo on JVM already exist. Work on making Rakudo run, then run fast, on the JVM will continue at the same kind of pace. After all, it's already been taking place concurrently with building MoarVM. :-)

What does this mean for Rakudo on Parrot?

In the short term, until MoarVM runs Rakudo well, this shouldn't really impact Rakudo on Parrot. Beyond that is a more interesting question. The JVM is widely deployed and battle-hardened, and so is interesting in its own right whatever else Rakudo runs on. That's still not the case for Parrot. Provided MoarVM gets to a point where it runs Rakudo more efficiently and is at least as stable and feature complete, it's fairly likely to end up as a more popular choice of backend. There are no plans to break support for Rakudo on Parrot.

Why do the initial work in private?

There were a bunch of reasons for doing so. First and foremost, because it was hard to gauge how long it would take to get anywhere interesting, if indeed it did. As such, it didn't seem constructive to raise expectations or discourage work on other paths that may have led somewhere better, sooner. Secondly, this had to be done on a fairly limited time budget. I certainly didn't have time for every bit of the design to be bikeshedded and rehashed 10 times, which is most certainly a risk when design is done in a very public way. Good designs often come from a single designer. For better or worse, MoarVM gets me.

Why not keep it private until point X?

The most immediate reason for making this work public now is because a large number of Perl 6 core developers will be at YAPC::NA, and I want us to be able to openly discuss MoarVM as part of the larger discussions and planning with regard to Perl 6, NQP and Rakudo. It's not in any sense "ready" for use in the real world yet. The benefits of the work being publicly known just hit the point of outweighing the costs.

What's the rough timeline?

My current aim is to have the MoarVM backend supported in NQP by the July or August release of NQP, with Rakudo support to come in the Rakudo compiler release in August or September. A "Star" distribution release, with modules and tools, would come after that. For now, the NQP cross-compiler lives in the MoarVM repository.

After we get Rakudo running and stabilized on MoarVM, the focus will move towards 6model-aware JIT compilation, improving the stability of the threads implementation (the parallel GC exists, but needs some love still), asynchronous IO and full NFG string/rope support.

We'll have a bunch of the right people in the same room at YAPC::NA, so we'll work on trying to get a more concrete roadmap together there.

Where is...

  • The Git repository: https://github.com/MoarVM/MoarVM
  • The IRC channel: #moarvm on freenode.org
+ exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.Oe2nV3 + umask 022 + cd /builddir/build/BUILD + '[' /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le '!=' / ']' + rm -rf /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le ++ dirname /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le + mkdir -p /builddir/build/BUILDROOT + mkdir /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le + cd MoarVM-2019.07.1 + /usr/bin/make install DESTDIR=/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le 'INSTALL=/usr/bin/install -p' /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/bin" /usr/bin/perl -MExtUtils::Command -e cp moar "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/bin" /usr/bin/perl -MExtUtils::Command -e chmod 755 "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/bin/moar" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/lib64" /usr/bin/perl -MExtUtils::Command -e rm_f "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/lib64/libmoar.so" /usr/bin/perl -MExtUtils::Command -e cp libmoar.so "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/lib64" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/nqp/lib/MAST" /usr/bin/perl -MExtUtils::Command -e cp lib/MAST/Nodes.nqp "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/nqp/lib/MAST" /usr/bin/perl -MExtUtils::Command -e cp lib/MAST/Ops.nqp "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/nqp/lib/MAST" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/pkgconfig" /usr/bin/perl -MExtUtils::Command -e cp pkgconfig/moar.pc "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/pkgconfig" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar" /usr/bin/perl -MExtUtils::Command -e cp src/gen/config.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/6model/reprs" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/core" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/gc" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/gen" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/io" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/math" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/platform" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/profiler" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/spesh" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/debug" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/strings" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/strings/siphash" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/jit" /usr/bin/perl -MExtUtils::Command -e mkpath "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/instrument" /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar" /usr/bin/perl -MExtUtils::Command -e cp src/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar" /usr/bin/perl -MExtUtils::Command -e cp src/6model/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/6model" /usr/bin/perl -MExtUtils::Command -e cp src/6model/reprs/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/6model/reprs" /usr/bin/perl -MExtUtils::Command -e cp src/core/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/core" /usr/bin/perl -MExtUtils::Command -e cp src/gc/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/gc" /usr/bin/perl -MExtUtils::Command -e cp src/gen/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/gen" /usr/bin/perl -MExtUtils::Command -e cp src/io/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/io" /usr/bin/perl -MExtUtils::Command -e cp src/math/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/math" /usr/bin/perl -MExtUtils::Command -e cp src/platform/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/platform" /usr/bin/perl -MExtUtils::Command -e cp src/profiler/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/profiler" /usr/bin/perl -MExtUtils::Command -e cp src/spesh/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/spesh" /usr/bin/perl -MExtUtils::Command -e cp src/debug/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/debug" /usr/bin/perl -MExtUtils::Command -e cp src/strings/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/strings" /usr/bin/perl -MExtUtils::Command -e cp src/strings/siphash/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/strings/siphash" /usr/bin/perl -MExtUtils::Command -e cp src/jit/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/jit" /usr/bin/perl -MExtUtils::Command -e cp src/instrument/*.h "/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/moar/instrument" /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libuv /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libuv/uv /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libuv/include/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libuv /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libuv/include/uv/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libuv/uv /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/armcc /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/gcc /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/hpc /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/ibmc /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/icc /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/loadstore /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/msftc /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/sunc /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/armcc/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/armcc /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/gcc/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/gcc /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/hpc/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/hpc /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/ibmc/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/ibmc /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/icc/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/icc /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/loadstore/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/loadstore /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/msftc/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/msftc /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libatomicops/src/atomic_ops/sysdeps/sunc/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libatomic_ops/atomic_ops/sysdeps/sunc /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libtommath /usr/bin/perl -MExtUtils::Command -e cp 3rdparty/libtommath/*.h /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/include/libtommath + chmod 755 /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/lib64/libmoar.so + /usr/bin/perl -MExtUtils::Command -e mkpath /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/man/man1 + /usr/bin/gzip -c + pod2man --section=1 --name=moar docs/moar.pod + /usr/lib/rpm/find-debuginfo.sh -j12 --strict-build-id -m -i --build-id-seed 0.2019.07.1-2.el8 --unique-debug-suffix -0.2019.07.1-2.el8.ppc64le --unique-debug-src-base moarvm-0.2019.07.1-2.el8.ppc64le --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 50000000 -S debugsourcefiles.list /builddir/build/BUILD/MoarVM-2019.07.1 extracting debug info from /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/bin/moar extracting debug info from /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/lib64/libmoar.so /usr/lib/rpm/sepdebugcrcfix: Updated 2 CRC32s, 0 CRC32s did match. 25859 blocks + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig /sbin/ldconfig: Warning: ignoring configuration file that cannot be opened: /etc/ld.so.conf: No such file or directory + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/brp-python-bytecompile 1 + /usr/lib/rpm/brp-python-hardlink + PYTHON3=/usr/libexec/platform-python + /usr/lib/rpm/redhat/brp-mangle-shebangs Processing files: moarvm-0.2019.07.1-2.el8.ppc64le Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.IRJoBL + umask 022 + cd /builddir/build/BUILD + cd MoarVM-2019.07.1 + DOCDIR=/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/doc/moarvm + export LC_ALL=C + LC_ALL=C + export DOCDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/doc/moarvm + cp -pr CREDITS /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/doc/moarvm + cp -pr docs /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/doc/moarvm + exit 0 Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.gmpUht + umask 022 + cd /builddir/build/BUILD + cd MoarVM-2019.07.1 + LICENSEDIR=/builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/licenses/moarvm + export LC_ALL=C + LC_ALL=C + export LICENSEDIR + /usr/bin/mkdir -p /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/licenses/moarvm + cp -pr LICENSE /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le/usr/share/licenses/moarvm + exit 0 Provides: libmoar.so()(64bit) moarvm = 0.2019.07.1-2.el8 moarvm(ppc-64) = 0.2019.07.1-2.el8 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: libc.so.6()(64bit) libc.so.6(GLIBC_2.17)(64bit) libc.so.6(GLIBC_2.28)(64bit) libdl.so.2()(64bit) libdl.so.2(GLIBC_2.17)(64bit) libffi.so.6()(64bit) libm.so.6()(64bit) libm.so.6(GLIBC_2.17)(64bit) libmoar.so()(64bit) libpthread.so.0()(64bit) libpthread.so.0(GLIBC_2.17)(64bit) librt.so.1()(64bit) rtld(GNU_HASH) Processing files: moarvm-devel-0.2019.07.1-2.el8.ppc64le Provides: moarvm-devel = 0.2019.07.1-2.el8 moarvm-devel(ppc-64) = 0.2019.07.1-2.el8 pkgconfig(moar) = 2019.07.1 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: /usr/bin/pkg-config Processing files: moarvm-debugsource-0.2019.07.1-2.el8.ppc64le Provides: moarvm-debugsource = 0.2019.07.1-2.el8 moarvm-debugsource(ppc-64) = 0.2019.07.1-2.el8 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Processing files: moarvm-debuginfo-0.2019.07.1-2.el8.ppc64le Provides: debuginfo(build-id) = 32af77da08c1300406e4342e1a6295f3da707ed0 debuginfo(build-id) = d2d7e7d13ee3729fcb9078361180bcd0aeb85e6b moarvm-debuginfo = 0.2019.07.1-2.el8 moarvm-debuginfo(ppc-64) = 0.2019.07.1-2.el8 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Recommends: moarvm-debugsource(ppc-64) = 0.2019.07.1-2.el8 Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le Wrote: /builddir/build/RPMS/moarvm-0.2019.07.1-2.el8.ppc64le.rpm Wrote: /builddir/build/RPMS/moarvm-devel-0.2019.07.1-2.el8.ppc64le.rpm Wrote: /builddir/build/RPMS/moarvm-debugsource-0.2019.07.1-2.el8.ppc64le.rpm Wrote: /builddir/build/RPMS/moarvm-debuginfo-0.2019.07.1-2.el8.ppc64le.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.gYjyse + umask 022 + cd /builddir/build/BUILD + cd MoarVM-2019.07.1 + /usr/bin/rm -rf /builddir/build/BUILDROOT/moarvm-0.2019.07.1-2.el8.ppc64le + exit 0 Child return code was: 0