Skip to content

Conversation

@ozars
Copy link

@ozars ozars commented Dec 29, 2025

This is a small patch to avoid strict aliasing issues manifested in GCC I came across a while ago.

The test case was complex and the failing assertion with a matcher was present only with -O3, so I don't have a standalone test. However, I manually confirmed adding -fno-strict-aliasing fixed the issue before this patch, and -O3 behaved as intended after this patch without turning strict-aliasing off.

There is a similar previous change in 50ce520.

For the relevant clause from the C++17 standard, refer to below note from https://timsong-cpp.github.io/cppwp/n4659/basic.life#8:

[ Note: If these conditions are not met, a pointer to the new object can be obtained from a pointer that represents the address of its storage by calling std::launder ([support.dynamic]).  — end note ]

This is a small patch to avoid strict aliasing issues manifested in GCC
I came across a while ago.

The test case was complex and the failing assertion with a matcher was
present only with `-O3`, so I don't have a standalone test. However, I
manually confirmed adding `-fno-strict-aliasing` fixed the issue before
this patch, and `-O3` behaved as intended after this patch without
turning strict-aliasing off.

There is a similar previous change in google@50ce520.

For the relevant clause from the C++17 standard, refer to below note
from https://timsong-cpp.github.io/cppwp/n4659/basic.life#8:

> [ Note: If these conditions are not met, a pointer to the new object
can be obtained from a pointer that represents the address of its
storage by calling std::launder ([support.dynamic]).  — end note ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant