Search Linux Wireless

Re: [PATCH] bitfield: use BUILD_BUG_ON_ZERO()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Umm, I really should've tested this :-)

As John points out, it can't possibly compile, e.g. because

> +#define __BF_FIELD_CHECK(_mask, _reg, _val)				\
> +	BUILD_BUG_ON_ZERO(!__builtin_constant_p(_mask)) +		\

this isn't actually a constant expression.

This would be harmless, since e.g.

> +	BUILD_BUG_ON_ZERO((_mask) == 0) +				\

this already forces _mask to be a constant, but

> +	BUILD_BUG_ON_ZERO(__builtin_constant_p(_val) ?			\
> +				~((_mask) >> __bf_shf(_mask)) & (_val) : 0) + \

we can't actually replicate this check.

We could just remove this as well, at the expense of not getting any
warnings if you write something like

	FIELD_PREP(0xf, 32);

Realistically, FIELD_PREP() is the only one that makes sense in a pure
constant context though, so we could just add __FIELD_PREP for that,
*with* all the checks. I'll send out a patch in a second that has this
and also adds __{u,le,be}{16,32,64}encode_bits().

johannes




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux