[{"id":3680583,"web_url":"http://patchwork.ozlabs.org/comment/3680583/","msgid":"<CACb0b4kukW_9xO+8H=0PbjuXkCN+3VXMfNbvLYh78Oc96gaGZQ@mail.gmail.com>","list_archive_url":null,"date":"2026-04-22T12:14:23","subject":"Re: [PATCH v2] libstdc++: Mandate power of two alignment for\n std::is_sufficiently_aligned.","submitter":{"id":48004,"url":"http://patchwork.ozlabs.org/api/people/48004/","name":"Jonathan Wakely","email":"jwakely@redhat.com"},"content":"On Wed, 22 Apr 2026 at 12:51, Tomasz Kamiński <tkaminsk@redhat.com> wrote:\n>\n> This implements LWG4290. Missing Mandates clauses on is_sufficiently_aligned.\n>\n> libstdc++-v3/ChangeLog:\n>\n>         * include/bits/align.h (is_sufficiently_aligned): Mandate\n>         that _Align is power of two.\n>         * testsuite/20_util/is_sufficiently_aligned/2_neg.cc: New test.\n> ---\n> v2 replaces a test file used for chrono::format compilation time\n> testing, with actual test for is_sufficiently_aligned.\n>\n> The test was included in previous run. OK for trunk?\n\nOK\n\n\n>\n>  libstdc++-v3/include/bits/align.h                    |  5 ++++-\n>  .../20_util/is_sufficiently_aligned/2_neg.cc         | 12 ++++++++++++\n>  2 files changed, 16 insertions(+), 1 deletion(-)\n>  create mode 100644 libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/2_neg.cc\n>\n> diff --git a/libstdc++-v3/include/bits/align.h b/libstdc++-v3/include/bits/align.h\n> index 1a14e282216..3c8355d0e07 100644\n> --- a/libstdc++-v3/include/bits/align.h\n> +++ b/libstdc++-v3/include/bits/align.h\n> @@ -116,7 +116,10 @@ align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept\n>      [[nodiscard,__gnu__::__always_inline__]]\n>      inline bool\n>      is_sufficiently_aligned(_Tp* __ptr)\n> -    { return reinterpret_cast<__UINTPTR_TYPE__>(__ptr) % _Align == 0; }\n> +    {\n> +      static_assert(std::has_single_bit(_Align));\n> +      return reinterpret_cast<__UINTPTR_TYPE__>(__ptr) % _Align == 0;\n> +    }\n>  #endif // __glibcxx_is_sufficiently_aligned\n>\n>  _GLIBCXX_END_NAMESPACE_VERSION\n> diff --git a/libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/2_neg.cc b/libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/2_neg.cc\n> new file mode 100644\n> index 00000000000..9db69b67ef6\n> --- /dev/null\n> +++ b/libstdc++-v3/testsuite/20_util/is_sufficiently_aligned/2_neg.cc\n> @@ -0,0 +1,12 @@\n> +// { dg-do compile { target c++26 } }\n> +\n> +#include <memory>\n> +\n> +void\n> +test01(int* ptr)\n> +{\n> +  (void)std::is_sufficiently_aligned<5>(ptr); // { dg-error \"here\" }\n> +  (void)std::is_sufficiently_aligned<7>(ptr); // { dg-error \"here\" }\n> +}\n> +\n> +// { dg-error \"static assertion failed\" \"\" { target *-*-* } 0 }\n> --\n> 2.53.0\n>","headers":{"Return-Path":"<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>","X-Original-To":["incoming@patchwork.ozlabs.org","gcc-patches@gcc.gnu.org"],"Delivered-To":["patchwork-incoming@legolas.ozlabs.org","gcc-patches@gcc.gnu.org"],"Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=UEM8geGH;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=UEM8geGH","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.133.124"],"Received":["from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0yqt6LWRz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 22:16:10 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 10EF24C31800\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 12:16:09 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by sourceware.org (Postfix) with ESMTP id AFF334BCA42E\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 12:14:42 +0000 (GMT)","from mail-yw1-f198.google.com (mail-yw1-f198.google.com\n [209.85.128.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-342-ERP1IjpXNgKMaFbeJT5uFQ-1; Wed, 22 Apr 2026 08:14:40 -0400","by mail-yw1-f198.google.com with SMTP id\n 00721157ae682-79e095d7628so125622377b3.0\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 05:14:40 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 10EF24C31800","OpenDKIM Filter v2.11.0 sourceware.org AFF334BCA42E"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org AFF334BCA42E","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org AFF334BCA42E","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776860082; cv=none;\n b=WDw4mv7q6u6deXLFY9fQZOQjCbEAPXIrKlxXhx9Q6/a07bFB0AHI/neWBIXelnP9ANaRAM+aYl2VBIzohgdZ852V1pplvQ/hpEwS9iordvQ/hjxdyp2avPW3o7Q1/aWn0x6/JcdfyUePG3ScWhAdd/gACX+8UVSGfnglvRRv2xA=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776860082; c=relaxed/simple;\n bh=BR1Hf13U4fa0arKWuoCTpUKWrD6vjU5ItM7kJgD0N8M=;\n h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;\n b=uADks6IgZSh+SCTSXcAmbVj38R6IKAy7L2HUk9pYe3b5JxGo51Y+m1mn2Z29ifpdVSj4jiIi+67nuNWHmgORsL/0XImgJB5kNE159r7/16Y9qVsJTH+wR2VQXHdNVhhHQk6lltz36ez7qGe9j+xYCPV9LuqVU1g1zIHzWERG5Nc=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776860082;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=EISM0Bflyy/FhPCFqHA3QrKkUIy9VbwUBk1Xv4fpwVM=;\n b=UEM8geGHM3Aay/PVc0WoqkToDmwcKku1vzxir68NYWhcWKnrz9BRfy/CO7/wZyyEOsJkHr\n 0itxGfhL2Sgl4oKjUPbm+otjhXB/5TJQJL/x5Xz1EDytuerRWzS08t+kyi7JoS/mDjbQwd\n glcre0svO5j7y4htJg2FjmNgg/EStlc=","X-MC-Unique":"ERP1IjpXNgKMaFbeJT5uFQ-1","X-Mimecast-MFC-AGG-ID":"ERP1IjpXNgKMaFbeJT5uFQ_1776860080","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776860080; x=1777464880;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=EISM0Bflyy/FhPCFqHA3QrKkUIy9VbwUBk1Xv4fpwVM=;\n b=nKAtPkU3R31AFRrtK8EZ+P3ofWlbs3lWom37e35NRSmqfIP8jx34MWPA7LW52MrJi/\n Ix72EuDhv+ss9dppNo6cFhY7z4nIXYhQaU8wgButLK11aoRZ95CdDCX5iB4mo0mOntoY\n qcJViQF74CbdDjOs3XvLmXbAcVKHKpNlKN8Z5LobtwfH326IOHfSSsErLq45NbViwJPr\n vWKQURwQZD/63W1JU/sPKxIxE2JKrj9MVPLmwQryn94HEco9t5HmEjiC8ZK5WNyPL3Eo\n 4hw2+QoKulU0UNqCJH7dc5QZRf9EDuN2BTYr2C7F2zVXVjEMX8s2+CoVWqeZxO9gHHgI\n h9hw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ8Vnl1pKuITmFXU+Akt5JCg/QVUfppvCJZJvm/YSGWK1VTia6jmqojmhTrZawvU0brL9fK3M1O3j/dYZA==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YxADcnrHzCdBeJ6IQ/dylcMePp/ffon5zsrQp54zDMLvRi8tGOR\n 3dh+IYtXK2Z6E0/jjfYPS0nKXHnAG+BYBaaAGTP6jkbCEBYuh5PKF00lBYgGmXhb4fz1erddoqV\n wtqq1665rvPd5kIAl1OPusmP1jMWlIr0pPj3k2U++WhuThgToNallsdV0ceEltziuVV+9fc3AIK\n GOgvubreZPlNi0W175CMH8KjP7mLuyKCA7bg==","X-Gm-Gg":"AeBDiev/UoIdw7c2f6JBE7an1RBCDzEPvsJNE4Kw2V0490lCzqzG/ythG++WU6aGBDX\n 0a/A1SOkoPPdbd+eSdFd/3P/UCYeLcDtU/aA2Bz/w3CJqc+VAQEwZOCNPnv0/BS0nsL4sTDgs+1\n vkqw2bfQP/sQETEBs88QXvKE1Z4PMj7GE4/SOBgqNUeFpYvAgcQyX4A6wni/ffDM1YR5XqncsZm\n AT2dMvs1VeCxZ1V0Sg3ZVQD33nr7dDD3l2+OveLFCKN6mLvkl7QtxjAmVD8tuAbgxT+rFjc6Vw5\n 1A==","X-Received":["by 2002:a53:ca0f:0:b0:651:c345:2ba7 with SMTP id\n 956f58d0204a3-65310b58c65mr16181305d50.63.1776860080253;\n Wed, 22 Apr 2026 05:14:40 -0700 (PDT)","by 2002:a53:ca0f:0:b0:651:c345:2ba7 with SMTP id\n 956f58d0204a3-65310b58c65mr16181265d50.63.1776860079758; Wed, 22 Apr 2026\n 05:14:39 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260422113908.795344-1-tkaminsk@redhat.com>\n <20260422115114.798654-1-tkaminsk@redhat.com>","In-Reply-To":"<20260422115114.798654-1-tkaminsk@redhat.com>","From":"Jonathan Wakely <jwakely@redhat.com>","Date":"Wed, 22 Apr 2026 13:14:23 +0100","X-Gm-Features":"AQROBzDFflHvsib0C9nm5VxJy_tv-icYw0Ao3NVIr3K6GcKpd7ZucC8aOshZWsQ","Message-ID":"\n <CACb0b4kukW_9xO+8H=0PbjuXkCN+3VXMfNbvLYh78Oc96gaGZQ@mail.gmail.com>","Subject":"Re: [PATCH v2] libstdc++: Mandate power of two alignment for\n std::is_sufficiently_aligned.","To":"=?utf-8?q?Tomasz_Kami=C5=84ski?= <tkaminsk@redhat.com>","Cc":"libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"VdCiH7f35f8iVmu-srRXMISgZZJh88anrfupplivPbo_1776860080","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","X-BeenThere":"gcc-patches@gcc.gnu.org","X-Mailman-Version":"2.1.30","Precedence":"list","List-Id":"Gcc-patches mailing list <gcc-patches.gcc.gnu.org>","List-Unsubscribe":"<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>","List-Archive":"<https://gcc.gnu.org/pipermail/gcc-patches/>","List-Post":"<mailto:gcc-patches@gcc.gnu.org>","List-Help":"<mailto:gcc-patches-request@gcc.gnu.org?subject=help>","List-Subscribe":"<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]