diff --git a/AK/Utf16StringData.h b/AK/Utf16StringData.h index 47a389643e..e762aff301 100644 --- a/AK/Utf16StringData.h +++ b/AK/Utf16StringData.h @@ -151,7 +151,7 @@ private: mutable bool m_is_fly_string { false }; - union { + union alignas(8) { char m_ascii_data[0]; char16_t m_utf16_data[0]; }; diff --git a/Tests/AK/TestUtf16String.cpp b/Tests/AK/TestUtf16String.cpp index 5368a96f0e..4fd5fa9a1e 100644 --- a/Tests/AK/TestUtf16String.cpp +++ b/Tests/AK/TestUtf16String.cpp @@ -445,6 +445,25 @@ TEST_CASE(from_string_builder) EXPECT_EQ(string, "ab😀𐀀🍕cd"sv); } +TEST_CASE(from_string_builder_alignment) +{ + StringBuilder builder(StringBuilder::Mode::UTF16); + builder.append("\u00a0"sv); + builder.append(R"~~( + +)~~"sv); + + auto string1 = builder.to_utf16_string(); + auto string2 = string1.to_utf8(); + + EXPECT_EQ(string1.code_unit_at(0), 0x00a0); + EXPECT_EQ(string2.bytes_as_string_view().substring_view(0, 2), "\u00a0"sv); +} + TEST_CASE(from_ipc_stream) { {