From d9ed84902d6bfec9c4d0288373eb425746e15d27 Mon Sep 17 00:00:00 2001 From: Giacomo Travaglini Date: Mon, 12 Sep 2022 16:50:43 +0100 Subject: [PATCH] sim: Fix serialize_handlers.test.cc on Arm platforms The C and C++ standards allows the character type char to be signed or unsigned, depending on the platform and compiler. Most systems, including x86 GNU/Linux and Microsoft Windows, use signed char, but those based on PowerPC and ARM processors typically use unsigned char This means testing for: EXPECT_FALSE(parser.parse("255", value)); is not portable as Arm platforms are able to convert 255 into an unsigned character. We are fixing this portability issue by performing different checks depending on the platform. Maybe a better solution would be to explicitly set the sign of the char (signed char in this case) Change-Id: I44dd84378ea62ae21a6b03e1f35119bf85f8c799 Signed-off-by: Giacomo Travaglini Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/63539 Maintainer: Daniel Carvalho Maintainer: Bobby Bruce Tested-by: kokoro Reviewed-by: Daniel Carvalho Reviewed-by: Bobby Bruce --- src/sim/serialize_handlers.test.cc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/sim/serialize_handlers.test.cc b/src/sim/serialize_handlers.test.cc index a844b7ab17..10b09bf608 100644 --- a/src/sim/serialize_handlers.test.cc +++ b/src/sim/serialize_handlers.test.cc @@ -224,9 +224,15 @@ TEST(SerializeTest, ParseParamChar) EXPECT_FALSE(parser.parse("false", value)); // 8-bit values - EXPECT_FALSE(parser.parse("255", value)); - EXPECT_TRUE(parser.parse("-128", value)); - EXPECT_EQ(char(-128), value); + if constexpr (std::is_signed_v) { + EXPECT_FALSE(parser.parse("255", value)); + EXPECT_TRUE(parser.parse("-128", value)); + EXPECT_EQ(char(-128), value); + } else { + EXPECT_FALSE(parser.parse("256", value)); + EXPECT_TRUE(parser.parse("255", value)); + EXPECT_EQ(char(255), value); + } // 16-bit values EXPECT_FALSE(parser.parse("1000", value));