[ https://issues.apache.org/jira/browse/ARROW-15461?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17483111#comment-17483111 ]
Yibo Cai commented on ARROW-15461: ---------------------------------- Great! Compiler generates much better machine code. Recommend opening a PR for this change. Curious why current c code is not optimized this way, given (len > 8) is UB. > [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 > Priority: Major > > 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)