From 80343ab7d829c21c65f8f9a14dd20158d028549f Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Sat, 26 Mar 2016 17:57:22 +0100 Subject: Fix assignment to/from volatile types Code like this was broken: char volatile vi = i; See testcase, happens in ideosyncratic legacy code sprinkling volatile all over. --- i386-gen.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'i386-gen.c') diff --git a/i386-gen.c b/i386-gen.c index c18b9c3..fc0748f 100644 --- a/i386-gen.c +++ b/i386-gen.c @@ -223,6 +223,8 @@ ST_FUNC void load(int r, SValue *sv) ft = sv->type.t; fc = sv->c.i; + ft &= ~(VT_VOLATILE | VT_CONSTANT); + v = fr & VT_VALMASK; if (fr & VT_LVAL) { if (v == VT_LLOCAL) { @@ -298,6 +300,7 @@ ST_FUNC void store(int r, SValue *v) ft = v->type.t; fc = v->c.i; fr = v->r & VT_VALMASK; + ft &= ~(VT_VOLATILE | VT_CONSTANT); bt = ft & VT_BTYPE; /* XXX: incorrect if float reg to reg */ if (bt == VT_FLOAT) { -- cgit v1.3.1