comparison src/structs.h @ 10658:77d66e9ac0ab v8.0.0219

patch 8.0.0219: ubsan reports errors for overflow commit https://github.com/vim/vim/commit/7a40ea2138102545848ea86a361f1b8dec7552b5 Author: Bram Moolenaar <Bram@vim.org> Date: Sun Jan 22 18:34:57 2017 +0100 patch 8.0.0219: ubsan reports errors for overflow Problem: Ubsan reports errors for integer overflow. Solution: Define macros for minimum and maximum values. Select an expression based on the value. (Mike Williams)
author Christian Brabandt <cb@256bit.org>
date Sun, 22 Jan 2017 18:45:04 +0100
parents 688b97124d23
children f883a1224396
comparison
equal deleted inserted replaced
10657:d4518c5bfd0b 10658:77d66e9ac0ab
1131 /* Use 64-bit Number. */ 1131 /* Use 64-bit Number. */
1132 # ifdef WIN3264 1132 # ifdef WIN3264
1133 # ifdef PROTO 1133 # ifdef PROTO
1134 typedef long varnumber_T; 1134 typedef long varnumber_T;
1135 typedef unsigned long uvarnumber_T; 1135 typedef unsigned long uvarnumber_T;
1136 #define VARNUM_MIN LONG_MIN
1137 #define VARNUM_MAX LONG_MAX
1138 #define UVARNUM_MAX ULONG_MAX
1136 # else 1139 # else
1137 typedef __int64 varnumber_T; 1140 typedef __int64 varnumber_T;
1138 typedef unsigned __int64 uvarnumber_T; 1141 typedef unsigned __int64 uvarnumber_T;
1142 #define VARNUM_MIN _I64_MIN
1143 #define VARNUM_MAX _I64_MAX
1144 #define UVARNUM_MAX _UI64_MAX
1139 # endif 1145 # endif
1140 # elif defined(HAVE_STDINT_H) 1146 # elif defined(HAVE_STDINT_H)
1141 typedef int64_t varnumber_T; 1147 typedef int64_t varnumber_T;
1142 typedef uint64_t uvarnumber_T; 1148 typedef uint64_t uvarnumber_T;
1149 #define VARNUM_MIN INT64_MIN
1150 #define VARNUM_MAX INT64_MAX
1151 #define UVARNUM_MAX UINT64_MAX
1143 # else 1152 # else
1144 typedef long varnumber_T; 1153 typedef long varnumber_T;
1145 typedef unsigned long uvarnumber_T; 1154 typedef unsigned long uvarnumber_T;
1155 #define VARNUM_MIN LONG_MIN
1156 #define VARNUM_MAX LONG_MAX
1157 #define UVARNUM_MAX ULONG_MAX
1146 # endif 1158 # endif
1147 #else 1159 #else
1148 /* Use 32-bit Number. */ 1160 /* Use 32-bit Number. */
1149 # if VIM_SIZEOF_INT <= 3 /* use long if int is smaller than 32 bits */ 1161 # if VIM_SIZEOF_INT <= 3 /* use long if int is smaller than 32 bits */
1150 typedef long varnumber_T; 1162 typedef long varnumber_T;
1151 typedef unsigned long uvarnumber_T; 1163 typedef unsigned long uvarnumber_T;
1164 #define VARNUM_MIN LONG_MIN
1165 #define VARNUM_MAX LONG_MAX
1166 #define UVARNUM_MAX ULONG_MAX
1152 # else 1167 # else
1153 typedef int varnumber_T; 1168 typedef int varnumber_T;
1154 typedef unsigned int uvarnumber_T; 1169 typedef unsigned int uvarnumber_T;
1170 #define VARNUM_MIN INT_MIN
1171 #define VARNUM_MAX INT_MAX
1172 #define UVARNUM_MAX UINT_MAX
1155 # endif 1173 # endif
1156 #endif 1174 #endif
1157 1175
1158 typedef double float_T; 1176 typedef double float_T;
1159 1177