T81340: UBSan: load of value .. not valid for GPU enum type

The underlying type of the enum cannot be fixed here due to its usage
in C code.

All the values possible in the width of the underlying type are not
valid for an enum.
Only 0 to (2*max - 1) if all enumerators are unsigned.
So the macro asks for the biggest value among the //listed// ones.
If any enumerator C is set to say `A|B`, then C would be the maximum.
(2*max-1) is used as the mask.

The warnings (for each enum modified in this commit):
GPU_vertex_buffer.h:43:1: runtime error: load of value 4294967291
which is not a valid value for type 'GPUVertBufStatus'

https://github.com/llvm/llvm-project/commit/1c2c9867

Ref T81340

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D9067
This commit is contained in:
2020-10-01 23:51:01 +05:30
parent 569510d704
commit a31a87f894
8 changed files with 13 additions and 12 deletions

View File

@@ -40,7 +40,7 @@ typedef enum {
GPU_VERTBUF_DATA_UPLOADED = (1 << 2),
} GPUVertBufStatus;
ENUM_OPERATORS(GPUVertBufStatus)
ENUM_OPERATORS(GPUVertBufStatus, GPU_VERTBUF_DATA_UPLOADED)
#ifdef __cplusplus
extern "C" {