Mercurial > hg
changeset 47975:ec178161a8d1
dirstate: make dirstate flags char be unsigned
Since https://phab.mercurial-scm.org/D11387, `CC='clang -Werror' make
local` has started failing like this:
```
mercurial/cext/util.h:41:50: error: implicit conversion from 'int' to 'char' changes value from 128 to -128 [-Werror,-Wconstant-conversion]
static const char dirstate_flag_rust_special = 1 << 7;
~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~^~~~
```
This patch fixes that by making the flags be an unsigned char. That
also matches the `bool` typedef we have in `util.h`, which seems good
since many of the `dirstate_item_c_*()` functions return a `bool`.
Differential Revision: https://phab.mercurial-scm.org/D11444
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Thu, 16 Sep 2021 16:29:55 -0700 |
parents | 4e6f27230aee |
children | 2018753014be |
files | mercurial/cext/parsers.c mercurial/cext/util.h |
diffstat | 2 files changed, 13 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/cext/parsers.c Thu Sep 02 03:59:35 2021 +0200 +++ b/mercurial/cext/parsers.c Thu Sep 16 16:29:55 2021 -0700 @@ -144,9 +144,10 @@ static inline bool dirstate_item_c_added(dirstateItemObject *self) { - char mask = (dirstate_flag_wc_tracked | dirstate_flag_p1_tracked | - dirstate_flag_p2_tracked); - char target = dirstate_flag_wc_tracked; + unsigned char mask = + (dirstate_flag_wc_tracked | dirstate_flag_p1_tracked | + dirstate_flag_p2_tracked); + unsigned char target = dirstate_flag_wc_tracked; return (self->flags & mask) == target; }
--- a/mercurial/cext/util.h Thu Sep 02 03:59:35 2021 +0200 +++ b/mercurial/cext/util.h Thu Sep 16 16:29:55 2021 -0700 @@ -24,21 +24,21 @@ /* clang-format off */ typedef struct { PyObject_HEAD - char flags; + unsigned char flags; int mode; int size; int mtime; } dirstateItemObject; /* clang-format on */ -static const char dirstate_flag_wc_tracked = 1; -static const char dirstate_flag_p1_tracked = 1 << 1; -static const char dirstate_flag_p2_tracked = 1 << 2; -static const char dirstate_flag_possibly_dirty = 1 << 3; -static const char dirstate_flag_merged = 1 << 4; -static const char dirstate_flag_clean_p1 = 1 << 5; -static const char dirstate_flag_clean_p2 = 1 << 6; -static const char dirstate_flag_rust_special = 1 << 7; +static const unsigned char dirstate_flag_wc_tracked = 1; +static const unsigned char dirstate_flag_p1_tracked = 1 << 1; +static const unsigned char dirstate_flag_p2_tracked = 1 << 2; +static const unsigned char dirstate_flag_possibly_dirty = 1 << 3; +static const unsigned char dirstate_flag_merged = 1 << 4; +static const unsigned char dirstate_flag_clean_p1 = 1 << 5; +static const unsigned char dirstate_flag_clean_p2 = 1 << 6; +static const unsigned char dirstate_flag_rust_special = 1 << 7; extern PyTypeObject dirstateItemType; #define dirstate_tuple_check(op) (Py_TYPE(op) == &dirstateItemType)