diff --git a/tcc.h b/tcc.h index 130c1b95..17d31af2 100644 --- a/tcc.h +++ b/tcc.h @@ -1015,6 +1015,7 @@ ST_FUNC void vpushi(int v); ST_FUNC Sym *external_global_sym(int v, CType *type, int r); ST_FUNC void vset(CType *type, int r, int v); ST_FUNC void vswap(void); +ST_FUNC void vpushv(SValue *v); ST_FUNC void save_reg(int r); ST_FUNC int get_reg(int rc); ST_FUNC void save_regs(int n); diff --git a/tccgen.c b/tccgen.c index af1abc11..363e6f97 100644 --- a/tccgen.c +++ b/tccgen.c @@ -400,7 +400,7 @@ ST_FUNC void vswap(void) vtop[-1] = tmp; } -static void vpushv(SValue *v) +ST_FUNC void vpushv(SValue *v) { if (vtop >= vstack + (VSTACK_SIZE - 1)) error("memory full"); diff --git a/tccpe.c b/tccpe.c index be92129a..536f4cdb 100644 --- a/tccpe.c +++ b/tccpe.c @@ -1620,7 +1620,7 @@ ST_FUNC int pe_dllimport(int r, SValue *sv, void (*fn)(int r, SValue *sv)) sv->sym->type.t = t & ~VT_IMPORT; //printf("import %x %04x %s\n", t, ind, get_tok_str(sv->sym->v, NULL)); - *++vtop = *sv; + vpushv(sv); vtop->type.t &= ~(VT_ARRAY|VT_IMPORT); mk_pointer(&vtop->type); indir(); diff --git a/x86_64-gen.c b/x86_64-gen.c index 2e7c8beb..79b18efe 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -611,7 +611,7 @@ void gfunc_call(int nb_args) /* generate memcpy call */ vset(&sv->type, r | VT_LVAL, 0); - *++vtop = *sv; + vpushv(sv); vstore(); --vtop;