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. --- x86_64-gen.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'x86_64-gen.c') diff --git a/x86_64-gen.c b/x86_64-gen.c index 692b420..bf983d4 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -369,6 +369,8 @@ void load(int r, SValue *sv) ft = sv->type.t & ~VT_DEFSIGN; fc = sv->c.i; + ft &= ~(VT_VOLATILE | VT_CONSTANT); + #ifndef TCC_TARGET_PE /* we use indirect access via got */ if ((fr & VT_VALMASK) == VT_CONST && (fr & VT_SYM) && @@ -532,6 +534,7 @@ 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; #ifndef TCC_TARGET_PE -- cgit v1.3.1