Skip to content

Commit 170467e

Browse files
[libc] fix 32bit riscv atomic tests (#119087)
This patch fixes test build failures on rv32 platforms. For non-integral data, it always limits the size and align to be the same as platform pointer layout. This should avoid the emitting of call to external `libatomic` symbols.
1 parent 8b041fa commit 170467e

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

libc/test/src/__support/CPP/atomic_test.cpp

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,20 @@ TEST(LlvmLibcAtomicTest, CompareExchangeStrong) {
3333
ASSERT_EQ(aint.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED), 100);
3434
}
3535

36-
struct TrivialData {
37-
int a;
38-
int b;
36+
struct alignas(void *) TrivialData {
37+
char a;
38+
char b;
39+
char padding[sizeof(void *) - 2];
3940
};
4041

4142
TEST(LlvmLibcAtomicTest, TrivialCompositeData) {
42-
LIBC_NAMESPACE::cpp::Atomic<TrivialData> data({1, 2});
43-
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 1);
44-
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 2);
45-
46-
auto old = data.exchange({3, 4});
47-
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 3);
48-
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 4);
49-
ASSERT_EQ(old.a, 1);
50-
ASSERT_EQ(old.b, 2);
43+
LIBC_NAMESPACE::cpp::Atomic<TrivialData> data({'a', 'b', {}});
44+
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 'a');
45+
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 'b');
46+
47+
auto old = data.exchange({'c', 'd', {}});
48+
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 'c');
49+
ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 'd');
50+
ASSERT_EQ(old.a, 'a');
51+
ASSERT_EQ(old.b, 'b');
5152
}

0 commit comments

Comments
 (0)