mirror of
https://github.com/mmueller41/genode.git
synced 2026-01-21 12:32:56 +01:00
base: Make int to access_t conversion explicit.
As far as I can tell this is not raised by any released GCC versions.
Clang 13 on the other hand warns about it due to implicit-int-conversion
warning which is automatically enabled together with Wconversion. The
problem is relatively simple, shifting access_t value does not always
produce result which is also of access_t type. For example, if access_t
is uint16_t, shifting it will produce integer result. This can be
observed even with GCC. Building the following C++ example will fail:
#include <type_traits>
#include <stdint.h>
int test() {
uint16_t a = 0xabcd;
static_assert(std::is_same_v<decltype(a<<1), uint16_t>);
return 0;
}
Changing uint16_t in the static_assert to int, will allow the code to
build.
Make such int to access_t implicit conversion explicit to allow the code
to be compiled with both GCC and clang.
Issue #4354
This commit is contained in:
committed by
Christian Helmuth
parent
b3f8b49873
commit
27b798fa4f
@@ -181,7 +181,7 @@ struct Genode::Register
|
||||
* bitfields into one operation.
|
||||
*/
|
||||
static inline access_t bits(access_t const value) {
|
||||
return (value & mask()) << SHIFT; }
|
||||
return access_t((value & mask()) << SHIFT); }
|
||||
|
||||
/**
|
||||
* Get a register value 'reg' masked according to this bitfield
|
||||
|
||||
Reference in New Issue
Block a user