On Mon, Oct 18, 2021 at 5:59 PM Stephen Hemminger <[email protected]> wrote: > Konstantin Ananyev <[email protected]> wrote: > > test_shift1_check() function fails with clang build. > > The reason for that is that clang uses 64-bit shift instruction for > > what expected to be 32-bit operation. > > To be more specific, this C code: > > r2 = (uint32_t)r2 >> r4; > > With clang produces: > > 41a4eb: 48 d3 ef shr %cl,%rdi > > In that particular case it is an allowed choice, as from one side > > left-operand value is known to fit into 32 bits, from other side > > according to 'C' standard: > > "...if the value of the right operand is negative or is greater than > > or equal to the width of the promoted left operand, the behavior is > > undefined." > > The problem is that on x86 behavior for 64-bit and 32-bit shift > > operation might differ. > > The fix avoids undefined behavior by making sure > > that right operand will not exceed width of the promoted left operand. > > > > Bugzilla ID: 811 > > Fixes: 9f8f9d91a701 ("test/bpf: introduce functional test") > > Cc: [email protected] > > > > Reported-by: Stephen Hemminger <[email protected]> > > Signed-off-by: Konstantin Ananyev <[email protected]> > Acked-by: Stephen Hemminger <[email protected]>
Applied, thanks. Probably worth adding bpf_autotest in the fast-tests list. There are other missing tests in this list, for my todolist unless someone wants to look at it. -- David Marchand

