[gcc r16-4418] libstdc++: Fix required alignment computation for floating points [PR122267]

Tomasz Kaminski tkaminsk@gcc.gnu.org
Tue Oct 14 11:13:18 GMT 2025


https://gcc.gnu.org/g:599d2902b0afd56485b56752a75b0f7a3b090c76

commit r16-4418-g599d2902b0afd56485b56752a75b0f7a3b090c76
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date:   Tue Oct 14 11:06:35 2025 +0200

    libstdc++: Fix required alignment computation for floating points [PR122267]
    
    Before the r16-4349-g90dde804626f13 the required alignment of floating point,
    and pointer specialization used __alignof__(_Vt) as required_alignment, and
    mentioned commit changed them to alignof(_Vt). This values differs on i686
    for double, as alignof(double) is 4, and __alignof__(double) is 8.
    
    This patch restores the previous behavior.
    
            PR libstdc++/122267
    
    libstdc++-v3/ChangeLog:
    
            * include/bits/atomic_base.h
            (__atomic_ref_base<const _Tp>::_S_required_alignment):
            Use __alignof__ instead of alignof.
    
    Reviewed-by: Jonathan Wakely <jwakely@redhat.com>

Diff:
---
 libstdc++-v3/include/bits/atomic_base.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libstdc++-v3/include/bits/atomic_base.h b/libstdc++-v3/include/bits/atomic_base.h
index 0f3f6b1925d3..7e4ad2b12723 100644
--- a/libstdc++-v3/include/bits/atomic_base.h
+++ b/libstdc++-v3/include/bits/atomic_base.h
@@ -1538,7 +1538,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       _S_required_aligment()
       {
 	if constexpr (is_floating_point_v<_Vt> || is_pointer_v<_Vt>)
-	  return alignof(_Vt);
+	  return __alignof__(_Vt);
 	else if constexpr ((sizeof(_Vt) & (sizeof(_Vt) - 1)) || sizeof(_Vt) > 16)
 	  return alignof(_Vt);
 	else


More information about the Libstdc++-cvs mailing list