From: Dale Weiler Date: Wed, 29 May 2013 02:24:12 +0000 (+0000) Subject: Result of shift operation on signed integers is bad. X-Git-Tag: v0.3.0~151^2~46 X-Git-Url: https://git.xonotic.org/?p=xonotic%2Fgmqcc.git;a=commitdiff_plain;h=e02ebfe4866c5dadc1d411b38673e360405de983 Result of shift operation on signed integers is bad. --- diff --git a/Makefile b/Makefile index 01a5dac..d419daa 100644 --- a/Makefile +++ b/Makefile @@ -162,7 +162,6 @@ SPLINTFLAGS = \ -mayaliasunique \ -realcompare \ -observertrans \ - -shiftnegative \ -abstract \ -statictrans \ -castfcnptr diff --git a/gmqcc.h b/gmqcc.h index 2e019a5..3b221e9 100644 --- a/gmqcc.h +++ b/gmqcc.h @@ -1163,7 +1163,7 @@ typedef struct { extern opts_cmd_t opts; -#define OPTS_GENERIC(f,i) (!! (((f)[(i)/32]) & (1<< ((i)%32)))) +#define OPTS_GENERIC(f,i) (!! (((f)[(i)/32]) & (1<< (unsigned)((i)%32)))) #define OPTS_FLAG(i) OPTS_GENERIC(opts.flags, (i)) #define OPTS_WARN(i) OPTS_GENERIC(opts.warn, (i)) #define OPTS_WERROR(i) OPTS_GENERIC(opts.werror, (i)) diff --git a/parser.c b/parser.c index 4d50bad..da9d33a 100644 --- a/parser.c +++ b/parser.c @@ -1038,9 +1038,9 @@ static bool parser_sy_apply_operator(parser_t *parser, shunt *sy) case opid2('>','>'): if (CanConstFold(exprs[0], exprs[1]) && ! NotSameType(TYPE_FLOAT)) { if (op->id == opid2('<','<')) - out = (ast_expression*)parser_const_float(parser, (double)((int)(ConstF(0)) << (int)(ConstF(1)))); + out = (ast_expression*)parser_const_float(parser, (double)((unsigned int)(ConstF(0)) << (unsigned int)(ConstF(1)))); else - out = (ast_expression*)parser_const_float(parser, (double)((int)(ConstF(0)) >> (int)(ConstF(1)))); + out = (ast_expression*)parser_const_float(parser, (double)((unsigned int)(ConstF(0)) >> (unsigned int)(ConstF(1)))); break; } case opid3('<','<','='):