From 7bda795365d886fb1881241ceb77f01da0e691b7 Mon Sep 17 00:00:00 2001 From: dzaima Date: Fri, 7 Oct 2022 12:42:13 +0300 Subject: [PATCH] fix gcc warnings about pointer casts in 32-bit builds --- src/core/stuff.c | 2 +- src/h.h | 4 ++-- src/vm.c | 20 ++++++++++---------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/core/stuff.c b/src/core/stuff.c index eb27be49..59d2ad89 100644 --- a/src/core/stuff.c +++ b/src/core/stuff.c @@ -861,7 +861,7 @@ void g_pst(void) { vm_pstLive(); fflush(stdout); fflush(stderr); } if (!isVal(x)) return x; VALIDATEP(v(x)); if(isArr(x)!=TI(x,isArr) && v(x)->type!=t_freed && v(x)->type!=t_harrPartial && !ignore_bad_tag) { - fprintf(stderr, "bad array tag/type: type=%d, obj=%p\n", v(x)->type, (void*)x.u); + fprintf(stderr, "bad array tag/type: type=%d, obj=%p\n", v(x)->type, TOPTR(void, x.u)); PRINT_ID(v(x)); fprint(stderr, x); err("\n"); diff --git a/src/h.h b/src/h.h index a15d4711..e080ee55 100644 --- a/src/h.h +++ b/src/h.h @@ -368,8 +368,8 @@ extern B thrownMsg; void freeThrown(void); - -#define c(T,X) ((T*)((X).u&0xFFFFFFFFFFFFull)) +#define TOPTR(T,X) ((T*)(uintptr_t)(X)) +#define c(T,X) TOPTR(T, (X).u&0xFFFFFFFFFFFFull) #define v(X) c(Value, X) #define a(X) c(Arr , X) diff --git a/src/vm.c b/src/vm.c index 10bf434a..73cad701 100644 --- a/src/vm.c +++ b/src/vm.c @@ -781,9 +781,9 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume } break; } - case DFND0: { GS_UPD;POS_UPD; ADD(evalFunBlock((Block*)L64, sc)); break; } - case DFND1: { GS_UPD;POS_UPD; ADD(m_md1Block ((Block*)L64, sc)); break; } - case DFND2: { GS_UPD;POS_UPD; ADD(m_md2Block ((Block*)L64, sc)); break; } + case DFND0: { GS_UPD;POS_UPD; ADD(evalFunBlock(TOPTR(Block,L64), sc)); break; } + case DFND1: { GS_UPD;POS_UPD; ADD(m_md1Block (TOPTR(Block,L64), sc)); break; } + case DFND2: { GS_UPD;POS_UPD; ADD(m_md2Block (TOPTR(Block,L64), sc)); break; } case MD1C: { P(f)P(m) GS_UPD;POS_UPD; ADD(m1_d (m,f )); break; } case MD2C: { P(f)P(m)P(g) GS_UPD;POS_UPD; ADD(m2_d (m,f,g)); break; } @@ -849,20 +849,20 @@ B evalBC(Body* b, Scope* sc, Block* bl) { // doesn't consume case SETH1:{ P(s) P(x) GS_UPD; POS_UPD; u64 v1 = L64; bool ok = v_seth(pscs, s, x); dec(x); dec(s); - if (!ok) { return gotoNextBody(bl, sc, (Body*)v1); } + if (!ok) { return gotoNextBody(bl, sc, TOPTR(Body, v1)); } break; } case SETH2:{ P(s) P(x) GS_UPD; POS_UPD; u64 v1 = L64; u64 v2 = L64; bool ok = v_seth(pscs, s, x); dec(x); dec(s); - if (!ok) { return gotoNextBody(bl, sc, (Body*)(q_N(sc->vars[2])? v1 : v2)); } + if (!ok) { return gotoNextBody(bl, sc, TOPTR(Body, q_N(sc->vars[2])? v1 : v2)); } break; } case PRED1:{ P(x) GS_UPD; POS_UPD; u64 v1 = L64; - if (!o2b(x)) { return gotoNextBody(bl, sc, (Body*)v1); } + if (!o2b(x)) { return gotoNextBody(bl, sc, TOPTR(Body, v1)); } break; } case PRED2:{ P(x) GS_UPD; POS_UPD; u64 v1 = L64; u64 v2 = L64; - if (!o2b(x)) { return gotoNextBody(bl, sc, (Body*)(q_N(sc->vars[2])? v1 : v2)); } + if (!o2b(x)) { return gotoNextBody(bl, sc, TOPTR(Body, q_N(sc->vars[2])? v1 : v2)); } break; } @@ -1374,7 +1374,7 @@ NOINLINE void vm_pst(Env* s, Env* e) { // e not included i = 10; } Comp* comp = c->sc->body->bl->comp; - i32 bcPos = c->pos&1? ((u32)c->pos)>>1 : BCPOS(c->sc->body, (u32*)c->pos); + i32 bcPos = c->pos&1? ((u32)c->pos)>>1 : BCPOS(c->sc->body, TOPTR(u32, c->pos)); vm_printPos(comp, bcPos, i); i--; } @@ -1407,7 +1407,7 @@ void profiler_sigHandler(int x) { if (envCurrbody->bl->comp; - i32 bcPos = e.pos&1? ((u32)e.pos)>>1 : BCPOS(e.sc->body, (u32*)e.pos); + i32 bcPos = e.pos&1? ((u32)e.pos)>>1 : BCPOS(e.sc->body, TOPTR(u32, e.pos)); *profiler_buf_c = (Profiler_ent){.comp = ptr_inc(comp), .bcPos = bcPos}; profiler_buf_c = bn; @@ -1572,7 +1572,7 @@ void unwindEnv(Env* envNew) { while (envCurr!=envNew) { // if ((envCurr->pos&1) == 0) printf("unwinding %ld\n", (u32*)envCurr->pos - (u32*)envCurr->sc->body->bl->bc); // else printf("not unwinding %ld", envCurr->pos>>1); - if ((envCurr->pos&1) == 0) envCurr->pos = (BCPOS(envCurr->sc->body, (u32*)envCurr->pos)<<1) | 1; + if ((envCurr->pos&1) == 0) envCurr->pos = (BCPOS(envCurr->sc->body, TOPTR(u32, envCurr->pos))<<1) | 1; envCurr--; } }