From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 67BE83858D28; Wed, 21 Jun 2023 12:18:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 67BE83858D28 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1687349934; bh=zLwFyzeTwb8h1xkPsQinCDh+xjm7Ngb9Z2/hUxIhv8E=; h=From:To:Subject:Date:From; b=ywMvOkkCyxK9Jxf3wdA20c4nPj8OOtEJ20O59/bQCHezMVM4xu20WBP264oQXRIVc +HbzQpHSZrh2oVREpVrSbTCVu15v8uaK242GpxMe8frCN+1BdUd5xGkLn206+/nVpP Kpuon/gvFCRLcjeJvAeI2cNxUQ64qpy/0+1vVCvg= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r12-9716] libstdc++: avoid bogus -Wrestrict [PR105651] X-Act-Checkin: gcc X-Git-Author: Jason Merrill X-Git-Refname: refs/heads/releases/gcc-12 X-Git-Oldrev: 5071f380a1bd741a361982750d28c20acc9f1f05 X-Git-Newrev: 636795a6dfc17ead7b22b9f76b0fc47bdb9d357d Message-Id: <20230621121854.67BE83858D28@sourceware.org> Date: Wed, 21 Jun 2023 12:18:54 +0000 (GMT) List-Id: https://gcc.gnu.org/g:636795a6dfc17ead7b22b9f76b0fc47bdb9d357d commit r12-9716-g636795a6dfc17ead7b22b9f76b0fc47bdb9d357d Author: Jason Merrill Date: Thu Aug 18 23:53:16 2022 -0400 libstdc++: avoid bogus -Wrestrict [PR105651] PR tree-optimization/105651 libstdc++-v3/ChangeLog: * include/bits/basic_string.tcc (_M_replace): Add an assert to avoid -Wrestrict false positive. Diff: --- libstdc++-v3/include/bits/basic_string.tcc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc index 0696b96604c..48fa28e6466 100644 --- a/libstdc++-v3/include/bits/basic_string.tcc +++ b/libstdc++-v3/include/bits/basic_string.tcc @@ -529,6 +529,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { const size_type __nleft = (__p + __len1) - __s; this->_S_move(__p, __s, __nleft); + // Tell the middle-end that the copy can't overlap + // (PR105651). + if (__len2 < __nleft) + __builtin_unreachable(); this->_S_copy(__p + __nleft, __p + __len2, __len2 - __nleft); }