From 7341a21b345e7aea1d2791db0f2d36866c434c03 Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Thu, 2 Feb 2023 16:51:31 +0100 Subject: [PATCH] GLSL: Fix integer overflow warnings in Constant.cpp New versions of Clang warn: ``` glslang/MachineIndependent/Constant.cpp(216,114): error: overflow in expression; result is -9223372036854775808 with type 'long long' [-Werror,-Winteger-overflow] else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == (long long)-0x8000000000000000ll) ^ glslang/MachineIndependent/Constant.cpp(217,61): error: overflow in expression; result is -9223372036854775808 with type 'long long' [-Werror,-Winteger-overflow] newConstArray[i].setI64Const((long long)-0x8000000000000000ll); ^ 2 errors generated. ``` Using LLONG_MIN instead avoids the problem. I think it's also more clear, and the code for EOpMod further down already does this. --- glslang/MachineIndependent/Constant.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 40f53bbc..f6916cbe 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -212,9 +212,9 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right case EbtInt64: if (rightUnionArray[i] == 0ll) - newConstArray[i].setI64Const(0x7FFFFFFFFFFFFFFFll); - else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == (long long)-0x8000000000000000ll) - newConstArray[i].setI64Const((long long)-0x8000000000000000ll); + newConstArray[i].setI64Const(LLONG_MAX); + else if (rightUnionArray[i].getI64Const() == -1 && leftUnionArray[i].getI64Const() == LLONG_MIN) + newConstArray[i].setI64Const(LLONG_MIN); else newConstArray[i].setI64Const(leftUnionArray[i].getI64Const() / rightUnionArray[i].getI64Const()); break;