Sergey Bugaev
2ec660b2ea
Stop using enums in bitfields
...
The C standard does not specify whether the underlying type of an enum
is signed or unsigned, and until C23 there was no way to control this
explicitly. GCC appears to make enums unsigned unless there is a
negative value among cases of the enum, in which case it becomes signed.
MSCV appears to make enums signed by default.
A bitfield of an enum type (which is not specificied in the C standard
either) behaves as if it was an instance of a numeric type with a
reduced value range. Specifically, a 'signed int val : 2;' bitfield will
have the possible values of -2, -1, 0, and 1, with the usual wraparound
behavior for the values that don't fit (although this too is
implementation-defined).
This causes the following issue, if we have:
typedef enum
{
G_ZERO,
G_ONE,
G_TWO
} GFoo;
struct _GBar
{
GFoo foo : 2;
};
and then assign bar.foo = G_TWO and read it back, it will have the
expected value of 2 (aka G_TWO) on GCC, but a value of -2 (not matching
any of the enum variants) on MSVC.
There does not seem to be any way to influence signedness of an enum
prior to C23, nor is there a 'unsigned GFoo foo : 2;' syntax. The only
remaining options seems to be never using enums in bitfields, which is
what this change implements.
This corresponds to https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6467
in GTK.
Signed-off-by: Sergey Bugaev <bugaevc@gmail.com>
2023-10-11 15:05:57 +03:00
..
2021-01-05 16:14:16 +00:00
2023-08-28 16:59:32 +01:00
2023-10-04 13:57:16 +01:00
2023-07-25 20:28:20 -05:00
2023-10-04 22:22:54 +00:00
2023-07-25 20:28:20 -05:00
2022-10-13 20:53:56 -04:00
2021-07-02 14:42:54 +02:00
2022-11-15 17:59:36 +00:00
2022-10-13 20:53:56 -04:00
2023-04-07 08:44:29 -04:00
2023-04-07 08:44:29 -04:00
2022-12-09 10:45:21 +00:00
2022-10-13 20:53:56 -04:00
2023-05-26 10:30:40 +01:00
2023-05-26 10:30:40 +01:00
2023-08-01 15:33:21 -03:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-12-19 12:45:02 +00:00
2023-08-01 15:33:21 -03:00
2022-12-09 10:45:21 +00:00
2022-12-09 10:45:21 +00:00
2022-10-13 20:53:56 -04:00
2022-12-09 10:45:21 +00:00
2022-07-05 12:30:46 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-12-15 19:30:43 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-06-01 12:44:23 +01:00
2022-05-18 09:18:52 +01:00
2022-07-25 22:30:22 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-02-02 21:25:56 +02:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-11-07 11:30:32 +00:00
2022-10-13 20:53:56 -04:00
2022-11-07 11:30:32 +00:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-01-06 11:46:01 +00:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-02-21 12:42:55 +00:00
2022-10-13 20:53:56 -04:00
2023-02-15 14:33:15 +00:00
2022-07-24 13:46:26 +01:00
2022-07-24 14:07:02 +01:00
2022-07-24 13:46:26 +01:00
2022-07-24 13:46:26 +01:00
2022-05-18 09:18:52 +01:00
2022-07-24 13:46:26 +01:00
2022-05-18 09:18:52 +01:00
2023-02-21 12:42:55 +00:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-08-28 11:11:37 +01:00
2022-10-13 20:53:56 -04:00
2022-12-16 18:45:37 +01:00
2022-07-05 12:30:46 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-06-27 16:49:43 +00:00
2022-10-13 20:53:56 -04:00
2023-08-01 15:33:21 -03:00
2022-10-13 20:53:56 -04:00
2022-12-14 15:42:14 +00:00
2022-10-13 20:53:56 -04:00
2023-08-28 11:11:37 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-12-16 18:45:36 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-12-16 18:45:36 +01:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2023-01-06 11:46:01 +00:00
2022-10-13 20:53:56 -04:00
2022-10-21 22:08:11 +07:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-03-29 14:05:43 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-09-02 19:48:36 +02:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-07-25 22:30:22 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-10-04 13:57:16 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-12-09 10:45:21 +00:00
2023-08-16 14:31:40 +01:00
2023-05-23 10:14:28 +00:00
2023-10-11 15:05:57 +03:00
2022-06-23 20:01:12 +02:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-12-08 05:21:19 +01:00
2023-07-21 21:24:50 +01:00
2023-07-21 21:24:50 +01:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-11-15 17:59:36 +00:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-06 17:25:13 +02:00
2022-10-20 11:39:04 +00:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-11-24 12:06:10 +00:00
2022-09-15 12:55:18 +02:00
2022-11-07 11:30:32 +00:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-08-12 20:01:36 +01:00
2022-11-07 11:30:32 +00:00
2023-03-21 12:15:50 +00:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-06-28 15:51:51 +00:00
2022-05-18 09:18:52 +01:00
2022-11-07 11:30:32 +00:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-07-31 13:19:50 -05:00
2022-05-18 09:18:52 +01:00
2023-03-21 12:15:50 +00:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 14:01:43 +00:00
2023-04-08 00:39:25 +00:00
2023-10-04 14:50:54 +01:00
2022-11-24 12:06:10 +00:00
2022-06-22 20:07:30 +02:00
2022-10-13 20:53:56 -04:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2023-04-20 08:54:23 -04:00
2022-10-13 20:53:56 -04:00
2022-11-07 11:30:32 +00:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2023-01-09 14:12:16 +01:00
2022-08-26 04:10:22 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-10-10 08:44:58 -07:00
2023-05-23 16:49:21 +06:00
2023-06-21 11:01:52 -07:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-05-18 09:18:52 +01:00
2023-05-19 11:53:18 +00:00
2022-05-18 09:18:52 +01:00
2023-10-03 09:32:44 +01:00
2023-06-30 15:00:56 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-06-23 10:46:45 +01:00
2022-10-13 20:53:56 -04:00
2023-02-22 00:38:13 +01:00
2022-05-18 09:18:52 +01:00
2023-07-28 15:04:49 +03:00
2022-05-18 09:18:52 +01:00
2022-10-26 18:07:55 +01:00
2022-05-18 09:18:52 +01:00
2019-06-17 16:29:09 -07:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-07-15 21:36:03 +02:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-08-13 01:21:49 -03:00
2022-12-14 15:42:14 +00:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-08-14 09:32:43 +01:00
2022-10-13 20:53:56 -04:00
2023-08-14 09:32:43 +01:00
2022-10-13 20:53:56 -04:00
2023-08-14 09:32:43 +01:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-08-14 09:32:43 +01:00
2022-10-13 20:53:56 -04:00
2022-07-15 21:36:09 +02:00
2022-05-18 09:18:52 +01:00
2022-11-16 10:12:05 +00:00
2022-10-13 20:53:56 -04:00
2022-11-16 10:12:05 +00:00
2022-05-18 09:18:52 +01:00
2022-07-15 21:36:09 +02:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-07-05 11:06:49 +00:00
2022-11-07 13:21:28 +00:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-03-23 12:08:08 +00:00
2022-10-13 20:53:56 -04:00
2023-03-23 12:08:08 +00:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-03-21 12:15:50 +00:00
2022-05-18 09:18:52 +01:00
2022-06-01 12:44:23 +01:00
2023-10-02 15:00:23 +01:00
2022-10-31 12:08:41 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-10-02 17:17:24 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-05-30 09:49:43 -05:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-04-27 23:33:47 +01:00
2023-04-14 17:00:01 +00:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2023-07-21 19:03:57 +01:00
2022-05-18 09:18:52 +01:00
2023-10-04 13:57:16 +01:00
2023-08-17 14:25:53 +01:00
2022-10-13 20:53:56 -04:00
2023-08-29 11:22:43 +01:00
2022-05-18 09:18:52 +01:00
2022-11-24 20:03:39 +01:00
2022-11-01 10:20:36 +00:00
2023-08-01 15:33:21 -03:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-01-13 22:14:56 +00:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2023-04-14 17:00:01 +00:00
2022-05-18 09:18:52 +01:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-12-22 15:37:27 -06:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-11-29 17:46:16 -05:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-06-23 10:46:45 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2023-01-13 18:06:23 +02:00
2022-10-13 20:53:56 -04:00
2023-07-21 19:03:57 +01:00
2023-05-16 13:33:19 +01:00
2023-09-14 15:42:24 +03:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-09-11 16:02:15 +01:00
2023-04-27 12:23:25 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-08-06 01:33:15 +02:00
2022-10-13 20:53:56 -04:00
2022-07-25 22:30:22 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-08-01 15:33:21 -03:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-10-04 13:57:16 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-07-21 19:03:57 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 14:01:43 +00:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-05-22 22:44:52 +02:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-07-05 12:30:46 +01:00
2022-07-05 12:30:46 +01:00
2022-07-05 12:30:46 +01:00
2023-02-21 18:01:51 +01:00
2022-07-05 12:30:46 +01:00
2023-04-05 13:50:23 +02:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-01-23 11:50:34 +00:00
2022-05-18 09:18:52 +01:00
2023-05-09 12:52:42 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2023-02-22 13:24:13 +01:00
2023-02-22 13:24:13 +01:00
2023-10-04 13:57:16 +01:00
2022-10-13 20:53:56 -04:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-10-13 20:53:56 -04:00
2022-05-27 17:03:35 +01:00
2022-10-13 20:53:56 -04:00
2023-09-01 22:24:39 +02:00
2020-06-12 15:01:08 +01:00
2019-12-17 20:48:22 +08:00
2019-12-17 20:48:22 +08:00
2019-01-31 19:00:19 -05:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00
2022-05-18 09:18:52 +01:00