Yibo Cai created ARROW-15461:
--------------------------------

             Summary: [C++] arrow-utility-test fails with clang-12 
(TestCopyAndReverseBitmapPreAllocated)
                 Key: ARROW-15461
                 URL: https://issues.apache.org/jira/browse/ARROW-15461
             Project: Apache Arrow
          Issue Type: Bug
          Components: C++
            Reporter: Yibo Cai


Unit test {{BitUtilTests.TestCopyAndReverseBitmapPreAllocated}} failed if 
release build arrow with clang-12, on both x86 and Arm.

Per my debug, it's related to {{GetReversedBlock}} function [1], when right 
shift a uint8 value by 8 bits.
I think it's a compiler bug. From the test code [2], clang-12 returns 1, which 
is wrong. clang-11 and clang-13 both return 2, the correct answer. Looks 
clang-12 over optimized the code, there should be no UB in the code (uint8 is 
promoted to integer before shift).

A workaround is to treat shifting 8 bits as a special case. Or we can simply 
ignore this error if the compiler bug is confirmed (I didn't find clang bug 
report).

[1] 
https://github.com/apache/arrow/blob/master/cpp/src/arrow/util/bitmap_ops.cc#L101
[2] https://godbolt.org/z/TzYWfcP1E



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to