From e7073a7336e021dd21700a963e3eabe8e1ed2132 Mon Sep 17 00:00:00 2001 From: Pavel Stupnikov Date: Fri, 29 Jul 2016 01:37:23 +0300 Subject: [PATCH] avoid VS2015U3 optimizator bug in ternary operator --- src/newgrf_spritegroup.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index 3615d66b03..f286aa591c 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -216,10 +216,11 @@ static U EvalAdjustT(const DeterministicSpriteGroupAdjust *adjust, ScopeResolver case DSGA_OP_SMAX: return max((S)last_value, (S)value); case DSGA_OP_UMIN: return min((U)last_value, (U)value); case DSGA_OP_UMAX: return max((U)last_value, (U)value); - case DSGA_OP_SDIV: return value == 0 ? (S)last_value : (S)last_value / (S)value; - case DSGA_OP_SMOD: return value == 0 ? (S)last_value : (S)last_value % (S)value; - case DSGA_OP_UDIV: return value == 0 ? (U)last_value : (U)last_value / (U)value; - case DSGA_OP_UMOD: return value == 0 ? (U)last_value : (U)last_value % (U)value; + // replaced ?: with if to avoid VS2015U3 optimizator bug + case DSGA_OP_SDIV: if (value == 0) return (S)last_value; else return (S)last_value / (S)value; + case DSGA_OP_SMOD: if (value == 0) return (S)last_value; else return (S)last_value % (S)value; + case DSGA_OP_UDIV: if (value == 0) return (U)last_value; else return (U)last_value / (U)value; + case DSGA_OP_UMOD: if (value == 0) return (U)last_value; else return (U)last_value % (U)value; case DSGA_OP_MUL: return last_value * value; case DSGA_OP_AND: return last_value & value; case DSGA_OP_OR: return last_value | value;