Skip to content

[libc] fix 32bit riscv atomic tests #119087

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Dec 9, 2024

Conversation

SchrodingerZhu
Copy link
Contributor

@SchrodingerZhu SchrodingerZhu commented Dec 7, 2024

This patch fix 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.

@llvmbot llvmbot added the libc label Dec 7, 2024
@llvmbot
Copy link
Member

llvmbot commented Dec 7, 2024

@llvm/pr-subscribers-libc

Author: Schrodinger ZHU Yifan (SchrodingerZhu)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/119087.diff

1 Files Affected:

  • (modified) libc/test/src/__support/CPP/atomic_test.cpp (+13-12)
diff --git a/libc/test/src/__support/CPP/atomic_test.cpp b/libc/test/src/__support/CPP/atomic_test.cpp
index 8772ad05f49ff7..5c3f60e9a68cd3 100644
--- a/libc/test/src/__support/CPP/atomic_test.cpp
+++ b/libc/test/src/__support/CPP/atomic_test.cpp
@@ -33,19 +33,20 @@ TEST(LlvmLibcAtomicTest, CompareExchangeStrong) {
   ASSERT_EQ(aint.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED), 100);
 }
 
-struct TrivialData {
-  int a;
-  int b;
+struct alignas(void *) TrivialData {
+  char a;
+  char b;
+  char padding[sizeof(void *) - 2];
 };
 
 TEST(LlvmLibcAtomicTest, TrivialCompositeData) {
-  LIBC_NAMESPACE::cpp::Atomic<TrivialData> data({1, 2});
-  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 1);
-  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 2);
-
-  auto old = data.exchange({3, 4});
-  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 3);
-  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 4);
-  ASSERT_EQ(old.a, 1);
-  ASSERT_EQ(old.b, 2);
+  LIBC_NAMESPACE::cpp::Atomic<TrivialData> data({'a', 'b', {}});
+  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 'a');
+  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 'b');
+
+  auto old = data.exchange({'c', 'd', {}});
+  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).a, 'c');
+  ASSERT_EQ(data.load(LIBC_NAMESPACE::cpp::MemoryOrder::RELAXED).b, 'd');
+  ASSERT_EQ(old.a, 'a');
+  ASSERT_EQ(old.b, 'b');
 }

@SchrodingerZhu SchrodingerZhu changed the title [libc] fix 32bit atomic tests [libc] fix 32bit riscv atomic tests Dec 7, 2024
@SchrodingerZhu SchrodingerZhu merged commit 170467e into llvm:main Dec 9, 2024
9 checks passed
@SchrodingerZhu SchrodingerZhu deleted the libc/fix-32bit-build branch December 9, 2024 03:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants