[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: restrict
From: |
Tim Rühsen |
Subject: |
Re: restrict |
Date: |
Mon, 17 Feb 2020 10:51:34 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.2 |
On 2/17/20 4:53 AM, Bruno Haible wrote:
> Paul Eggert wrote:
>> if GCC generated warnings for that sort of thing, the warnings would be false
>> alarms.
>
> Yes, and this in turn means that the ability to produce useful warnings via
> 'restrict' is limited. In this example:
> ===================================================================
> #include <string.h>
> extern void memmcpy (void *restrict, const void *restrict, size_t);
>
> void shuffle (char array[10])
> {
> memmcpy (array + 2, array, 8);
> memcpy (array + 2, array, 8);
> }
> ===================================================================
> gcc gives no warning about 'memmcpy' - because it does not know
> how many elements the function will access. gcc does give a warning
> about 'memcpy' - apparently due to custom logic in the compiler.
The following gives you a warning, with -O2 / -O3 and -Wall:
===================================================================
#include <string.h>
void memmcpy (void *restrict d, void *restrict s, size_t n)
{
memcpy(d, s, n);
}
void shuffle ()
{
char array[] = "abcdefg", *array2 = array + 2;
memmcpy (array, array2 - 2, 8);
}
===================================================================
$ gcc-8 -O2 -Wall x.c
In function ‘memmcpy’,
inlined from ‘shuffle’ at x.c:11:3:
x.c:4:3: warning: ‘memcpy’ accessing 8 bytes at offsets 0 and 0 overlaps
8 bytes at offset 0 [-Wrestrict]
memcpy(d, s, n);
^~~~~~~~~~~~~~~
Regards, Tim
signature.asc
Description: OpenPGP digital signature
- Possible testing case of snprintf., Mats Erik Andersson, 2020/02/09
- Re: Possible testing case of snprintf., Tim Rühsen, 2020/02/09
- Re: restrict, Bruno Haible, 2020/02/09
- Re: restrict, Jeffrey Walton, 2020/02/10
- Re: restrict, Tim Rühsen, 2020/02/10
- Re: restrict, Paul Eggert, 2020/02/16
- Re: restrict, Bruno Haible, 2020/02/16
- Re: restrict, Bruno Haible, 2020/02/16
- Re: restrict, Paul Eggert, 2020/02/16
- Re: restrict, Bruno Haible, 2020/02/16
- Re: restrict,
Tim Rühsen <=
- Re: restrict, Bruno Haible, 2020/02/17
- Re: restrict, Paul Eggert, 2020/02/17
- Re: restrict, Bruno Haible, 2020/02/17
- Re: restrict, Paul Eggert, 2020/02/17
- Re: restrict - summary, Bruno Haible, 2020/02/17
- Re: restrict - summary, Bruno Haible, 2020/02/22
- Re: restrict - summary, Eric Blake, 2020/02/24
- Re: restrict - summary, Bruno Haible, 2020/02/23
- Re: restrict - summary, Bruno Haible, 2020/02/23