ports/audio/libaudiofile/files/patch-libaudiofile_modules_SimpleModule.h
Dimitry Andric 7955b1d7ec audio/libaudiofile: fix build with clang 19, enable tests
Clang 19 has become more strict about initialization with undefined
behavior, resulting in errors similar to:

  ./SimpleModule.h:126:40: error: in-class initializer for static data member is not a constant expression
    126 |         static const int kMinSignedValue = -1 << kScaleBits;
        |                                            ~~~^~~~~~~~~~~~~
  ./SimpleModule.h:176:22: note: in instantiation of template class 'signConverter<kInt8>' requested here
    176 |                 transform<typename signConverter<Format>::signedToUnsigned>(src, dst, count);
        |                                    ^
  ./SimpleModule.h:183:5: note: in instantiation of function template specialization 'ConvertSign::convertSignedToUnsigned<kInt8>' requested here
    183 |                                 convertSignedToUnsigned<kInt8>(src, dst, count);
        |                                 ^

This is because left-shifting negative values is undefined. Replace -1
with ~0u which results in the expected value.

While here, add a few other patches to remove warnings about undefined
left-shifts, and add support for the "make test" target.

PR:		281477
Approved by:	maintainer timeout (2 weeks)
MFH:		2024Q3
2024-09-28 11:43:47 +02:00

11 lines
475 B
C++

--- libaudiofile/modules/SimpleModule.h.orig 2013-03-06 05:30:03 UTC
+++ libaudiofile/modules/SimpleModule.h
@@ -123,7 +123,7 @@ struct signConverter
typedef typename IntTypes<Format>::UnsignedType UnsignedType;
static const int kScaleBits = (Format + 1) * CHAR_BIT - 1;
- static const int kMinSignedValue = -1 << kScaleBits;
+ static const int kMinSignedValue = ~0u << kScaleBits;
struct signedToUnsigned : public std::unary_function<SignedType, UnsignedType>
{