Mercurial > vim
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 |