On Fri, Jun 09, 2023 at 05:31:47PM +0200, Daniel Vacek wrote: > Our customer reported the below warning whe using Clang v16.0.4 and C++20, > on a code that includes the header "/usr/include/infiniband/verbs.h": > > error: bitwise operation between different enumeration types ('ibv_access_flags' and > 'ib_uverbs_access_flags') is deprecated [-Werror,-Wdeprecated-enum-enum-conversion] > mem->mr = ibv_reg_mr(dev->pd, (void*)start, len, IBV_ACCESS_LOCAL_WRITE); > ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > /usr/include/infiniband/verbs.h:2514:19: note: expanded from macro 'ibv_reg_mr' > ((access) & IBV_ACCESS_OPTIONAL_RANGE) == 0)) > ~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ > 1 error generated. > > According to the article "Clang 11 warning: Bitwise operation between different > enumeration types is deprecated": > > C++20's P1120R0 deprecated bitwise operations between different enums. Such code is > likely to become ill-formed in C++23. Clang 11 warns about such cases. It should be fixed. There should be a cast to an integer in the macro, we can't know what the user will pass in there and it may not be that enum. Jason