summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Wagner <bungeman@google.com>2017-06-28 22:57:41 +0200
committerWerner Lemberg <wl@gnu.org>2017-06-28 22:57:41 +0200
commit7819aeb622a94be0d89caf8382f290d0266c4aed (patch)
tree15afe3bc395e43354234e577e0cc7f4c725a97b7
parent2e7bb5e825880301e762f41fd0efa2aa18a4421f (diff)
downloadfreetype2-7819aeb622a94be0d89caf8382f290d0266c4aed.tar.gz
Avoid Microsoft compiler warnings (#51331).
While clang's sanitizer recommends a cast to unsigned for safe negation (to handle -INT_MIN), both MSVC and Visualc emit warning C4146 if an unsigned value gets negated. * include/freetype/internal/ftcalc.h (NEG_LONG, NEG_INT32), src/base/ftcalc.c (FT_MOVE_SIGN): Replace negation with a subtraction.
-rw-r--r--ChangeLog12
-rw-r--r--include/freetype/internal/ftcalc.h4
-rw-r--r--src/base/ftcalc.c2
3 files changed, 15 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index e9a047bca..a233f703c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2017-06-28 Ben Wagner <bungeman@google.com>
+
+ Avoid Microsoft compiler warnings (#51331).
+
+ While clang's sanitizer recommends a cast to unsigned for safe
+ negation (to handle -INT_MIN), both MSVC and Visualc emit warning
+ C4146 if an unsigned value gets negated.
+
+ * include/freetype/internal/ftcalc.h (NEG_LONG, NEG_INT32),
+ src/base/ftcalc.c (FT_MOVE_SIGN): Replace negation with a
+ subtraction.
+
2017-06-27 Werner Lemberg <wl@gnu.org>
* src/cff/cffparse.c (do_fixed): Fix typo.
diff --git a/include/freetype/internal/ftcalc.h b/include/freetype/internal/ftcalc.h
index d93a05488..8b35f03d8 100644
--- a/include/freetype/internal/ftcalc.h
+++ b/include/freetype/internal/ftcalc.h
@@ -424,7 +424,7 @@ FT_BEGIN_HEADER
#define MUL_LONG( a, b ) \
(FT_Long)( (FT_ULong)(a) * (FT_ULong)(b) )
#define NEG_LONG( a ) \
- (FT_Long)( -(FT_ULong)(a) )
+ (FT_Long)( (FT_ULong)0 - (FT_ULong)(a) )
#define ADD_INT32( a, b ) \
(FT_Int32)( (FT_UInt32)(a) + (FT_UInt32)(b) )
@@ -433,7 +433,7 @@ FT_BEGIN_HEADER
#define MUL_INT32( a, b ) \
(FT_Int32)( (FT_UInt32)(a) * (FT_UInt32)(b) )
#define NEG_INT32( a ) \
- (FT_Int32)( -(FT_UInt32)(a) )
+ (FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) )
FT_END_HEADER
diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c
index f27fcfda0..fa28e79b3 100644
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -74,7 +74,7 @@
FT_BEGIN_STMNT \
if ( x < 0 ) \
{ \
- x_unsigned = -x_unsigned; \
+ x_unsigned = 0u - (x_unsigned); \
s = -s; \
} \
FT_END_STMNT