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
This commit is contained in:
Dimitry Andric 2024-09-13 11:11:45 +02:00
parent 5a269b5cd4
commit 7955b1d7ec
7 changed files with 96 additions and 0 deletions

View file

@ -23,6 +23,9 @@ USE_LDCONFIG= yes
GNU_CONFIGURE= yes
GNU_CONFIGURE_MANPREFIX=${PREFIX}/share
do-test:
cd ${WRKSRC} && ${MAKE} check
post-install:
@${STRIP_CMD} ${STAGEDIR}${PREFIX}/lib/libaudiofile.so.1

View file

@ -0,0 +1,11 @@
--- gtest/gtest.h.orig 2013-02-11 17:23:26 UTC
+++ gtest/gtest.h
@@ -529,7 +529,7 @@
// feature depending on tuple with be disabled in this mode).
#ifndef GTEST_HAS_TR1_TUPLE
// The user didn't tell us not to do it, so we assume it's OK.
-# define GTEST_HAS_TR1_TUPLE 1
+# define GTEST_HAS_TR1_TUPLE 0
#endif // GTEST_HAS_TR1_TUPLE
// Determines whether Google Test's own tr1 tuple implementation

View file

@ -0,0 +1,11 @@
--- 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>
{

View file

@ -0,0 +1,11 @@
--- test/FloatToInt.cpp.orig 2013-02-11 17:23:26 UTC
+++ test/FloatToInt.cpp
@@ -115,7 +115,7 @@ TEST_F(FloatToIntTest, Int16)
EXPECT_EQ(readData[i], expectedData[i]);
}
-static const int32_t kMinInt24 = -1<<23;
+static const int32_t kMinInt24 = ~0u<<23;
static const int32_t kMaxInt24 = (1<<23) - 1;
TEST_F(FloatToIntTest, Int24)

View file

@ -0,0 +1,11 @@
--- test/IntToFloat.cpp.orig 2013-02-11 17:23:26 UTC
+++ test/IntToFloat.cpp
@@ -117,7 +117,7 @@ TEST_F(IntToFloatTest, Int16)
EXPECT_EQ(readData[i], expectedData[i]);
}
-static const int32_t kMinInt24 = -1<<23;
+static const int32_t kMinInt24 = ~0u<<23;
static const int32_t kMaxInt24 = (1<<23) - 1;
TEST_F(IntToFloatTest, Int24)

View file

@ -0,0 +1,29 @@
--- test/NeXT.cpp.orig 2013-02-11 17:23:26 UTC
+++ test/NeXT.cpp
@@ -37,7 +37,7 @@
#include "TestUtilities.h"
-const char kDataUnspecifiedLength[] =
+const unsigned char kDataUnspecifiedLength[] =
{
'.', 's', 'n', 'd',
0, 0, 0, 24, // offset of 24 bytes
@@ -57,7 +57,7 @@ const char kDataUnspecifiedLength[] =
0, 55
};
-const char kDataTruncated[] =
+const unsigned char kDataTruncated[] =
{
'.', 's', 'n', 'd',
0, 0, 0, 24, // offset of 24 bytes
@@ -152,7 +152,7 @@ TEST(NeXT, Truncated)
ASSERT_EQ(::unlink(testFileName.c_str()), 0);
}
-const char kDataZeroChannels[] =
+const unsigned char kDataZeroChannels[] =
{
'.', 's', 'n', 'd',
0, 0, 0, 24, // offset of 24 bytes

View file

@ -0,0 +1,20 @@
--- test/Sign.cpp.orig 2013-02-11 17:23:26 UTC
+++ test/Sign.cpp
@@ -116,7 +116,7 @@ TEST_F(SignConversionTest, Int16)
EXPECT_EQ(readData[i], expectedData[i]);
}
-static const int32_t kMinInt24 = -1<<23;
+static const int32_t kMinInt24 = ~0u<<23;
static const int32_t kMaxInt24 = (1<<23) - 1;
static const uint32_t kMaxUInt24 = (1<<24) - 1;
@@ -157,7 +157,7 @@ TEST_F(SignConversionTest, Int32)
AFframecount framesRead = afReadFrames(file, AF_DEFAULT_TRACK, readData, frameCount);
ASSERT_EQ(framesRead, frameCount);
afCloseFile(file);
- const uint32_t expectedData[] = { 0, -kMinInt32, kMaxUInt32 };
+ const uint32_t expectedData[] = { 0, -static_cast<uint32_t>(kMinInt32), kMaxUInt32 };
for (int i=0; i<frameCount; i++)
EXPECT_EQ(readData[i], expectedData[i]);
}