From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from r-passerv.ralfj.de (r-passerv.ralfj.de [109.230.236.95]) by sourceware.org (Postfix) with ESMTPS id 4658C3858CD1 for ; Sat, 25 Nov 2023 08:20:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4658C3858CD1 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=ralfj.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ralfj.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 4658C3858CD1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=109.230.236.95 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700900415; cv=none; b=V/3uO4iaXTUgdwL1EVqJ5HI8Re3nRSejDRFiDwCkLlTzUw/xHLLQLm7meP1W0dbOn4Kql7j8mbxrR+RBJe9q4OdJwOKNszhq4o8EeWxo8V/GysnEF2WmnM/OssBbJOpWXf72hcK4ki+Nh1wgBTZ2U6r/UvRrFX7rRHNZLm/YeUI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1700900415; c=relaxed/simple; bh=L+kIVC2BrjhTRFWKtYbiGl+RIwg00Q61f7S1IqJCADw=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=Jzg+PSqbb09H5doJ5fsfnaQUlYr+oWc1XajHDKVpvHnu5hKZUPaVINkzJOomP8L0TAM57EOOiB+Fcn2FXOAiw1qV+9WAmdCMQzPifKwrPL2SOKKZZfFT95nYPKMz6F5UkPvqpuUM3X99KRNqYZPgIB9JueQw1kcj4QhN5PYqX14= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from [IPV6:2001:8e0:206b:3300:8ab7:e563:780d:fa03] (unknown [IPv6:2001:8e0:206b:3300:8ab7:e563:780d:fa03]) by r-passerv.ralfj.de (Postfix) with ESMTPSA id 395D92052018; Sat, 25 Nov 2023 09:20:10 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=ralfj.de; s=mail; t=1700900410; bh=L+kIVC2BrjhTRFWKtYbiGl+RIwg00Q61f7S1IqJCADw=; h=Date:Subject:To:References:From:In-Reply-To:From; b=YF/yEM0+rJ/P+apTJBV3arasbCdwKitdzVXeC1WdiZOzeC/ytZdADMnf9TW7KmWp2 3hcLDg80F66f/x8mNVo6kVHKJlksZY0AYgQKZmxYyaAQae8Vqeg1BUH84LjoAKECZU 1JrmXbZb9PdB12fBIuP9QEw2XPPDJ87DiIIf8Kck= Message-ID: Date: Sat, 25 Nov 2023 09:20:09 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Support for memcpy with equal source and destination Content-Language: en-US To: Paul Eggert , Adhemerval Zanella Netto , libc-alpha References: <1e8beece-f865-4309-a28f-6782135e2a8a@linaro.org> From: Ralf Jung Autocrypt: addr=post@ralfj.de; keydata= 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 In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,JMQ_SPF_NEUTRAL,SPF_HELO_PASS,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi, On 25.11.23 08:48, Paul Eggert wrote: > I see several areas of possible confusion, so if we make this change to the > glibc documentation, the new documentation should make the following clear: > > * This is a GNU extension, and other C libraries might not guarantee this (not > surprising). Also, other C compilers might not guarantee this even when used > with glibc (somewhat more surprising). > > * GCC and other compilers might warn about memcpy (X, X, SIZE) even if it is > supported. > > * This an exception to the usual rule about "restrict", since the prototype says > "restrict" but it's OK if the two pointers are the same (so "restrict" now means > that they cannot overlap other than being equal, just for this particular > function). Note that "restrict" does not mean "must not be equal". It means "the accesses performed through this pointer (and pointers derived from it) must be disjoint from the accesses performed through other pointers (excluding memory that is only being read)". So when one sees restrict in a signature, it is impossible to tell what the actual constraint is without further documentation: the function needs to say which memory is being accesses through which pointer, and *that* is then where the disjointness comes from. That said, if the glibc memcpy has "restrict" in its signature, then GCC itself will optimize it assuming that the two buffers are truly disjoint. For a memcpy that is implemented in C (rather than assembly), I don't think it is possible to make this promise (of supporting src==dest) when there is "restrict" in the signature. So if glibc wants to make that promise I think it needs to remove "restrict" from its memcpy signatures. Kind regards, Ralf