summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-12-12 01:12:46 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-12-14 00:40:52 +0100
commit1376b07cf3395716bd566afa31631d4753b0d54a (patch)
tree40fb89a67178992d86c3bf6ec88d485757e011df
parentf010d1ae2a19ea171a2ef64dc92a8c29cd160cbd (diff)
downloadsparse-1376b07cf3395716bd566afa31631d4753b0d54a.tar.gz
use bits_mask() for predefined_max()
Creating a bit mask using '(1 << n) - 1' is undefined if n is as big as the width of an int. Use the safe helper bits_mask() to create the mask/value for predefined_max(). Note: predefined_max() is currently correct only for signed types. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--lib.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lib.c b/lib.c
index 70c5c72b..8cd2a837 100644
--- a/lib.c
+++ b/lib.c
@@ -46,6 +46,7 @@
#include "target.h"
#include "machine.h"
#include "version.h"
+#include "bits.h"
int verbose, optimize_level, optimize_size, preprocessing;
int die_if_error = 0;
@@ -1142,7 +1143,7 @@ static void predefined_width(const char *name, unsigned bits)
static void predefined_max(const char *name, const char *suffix, unsigned bits)
{
- unsigned long long max = (1ULL << (bits - 1 )) - 1;
+ unsigned long long max = bits_mask(bits - 1);
char buf[32];
snprintf(buf, sizeof(buf), "__%s_MAX__", name);