diff mbox series

[RFC,(fix,for,5.0?)] block/io: do not do pointer arithmetic on void *

Message ID 20200318142253.2809-1-vsementsov@virtuozzo.com (mailing list archive)
State New, archived
Headers show
Series [RFC,(fix,for,5.0?)] block/io: do not do pointer arithmetic on void * | expand

Commit Message

Vladimir Sementsov-Ogievskiy March 18, 2020, 2:22 p.m. UTC
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
---

Hi all!

C standard doesn't allow pointer arithmetic on void *.
Still, gcc allows it as an extension:
 https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html

I can create a series of patches like this. Do we need it?

Also, where is documented which compilers are supported by Qemu?

 block/io.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Daniel P. Berrangé March 18, 2020, 2:26 p.m. UTC | #1
On Wed, Mar 18, 2020 at 05:22:53PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
> 
> Hi all!
> 
> C standard doesn't allow pointer arithmetic on void *.
> Still, gcc allows it as an extension:
>  https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
> 
> I can create a series of patches like this. Do we need it?

I don't think so, we only care about gcc & clang.

> Also, where is documented which compilers are supported by Qemu?

It is checked in configure - gcc 4.8 or clang 3.4 or xcode clang 5.1

> 
>  block/io.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/block/io.c b/block/io.c
> index aba67f66b9..539178aed5 100644
> --- a/block/io.c
> +++ b/block/io.c
> @@ -1277,7 +1277,7 @@ static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child,
>       * modifying the image file.  This is critical for zero-copy guest I/O
>       * where anything might happen inside guest memory.
>       */
> -    void *bounce_buffer = NULL;
> +    char *bounce_buffer = NULL;
>  
>      BlockDriver *drv = bs->drv;
>      int64_t cluster_offset;
> -- 
> 2.21.0
> 
> 

Regards,
Daniel
Eric Blake March 18, 2020, 2:39 p.m. UTC | #2
On 3/18/20 9:26 AM, Daniel P. Berrangé wrote:
> On Wed, Mar 18, 2020 at 05:22:53PM +0300, Vladimir Sementsov-Ogievskiy wrote:
>> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
>> ---
>>
>> Hi all!
>>
>> C standard doesn't allow pointer arithmetic on void *.
>> Still, gcc allows it as an extension:
>>   https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
>>
>> I can create a series of patches like this. Do we need it?
> 
> I don't think so, we only care about gcc & clang.

Still, if all supported compilers support the extension, then our 
CODING_STYLE.rst should mention that it is safe to rely on the extension.

> 
>> Also, where is documented which compilers are supported by Qemu?
> 
> It is checked in configure - gcc 4.8 or clang 3.4 or xcode clang 5.1
>
Stefan Hajnoczi March 20, 2020, 4:08 p.m. UTC | #3
On Wed, Mar 18, 2020 at 02:26:54PM +0000, Daniel P. Berrangé wrote:
> On Wed, Mar 18, 2020 at 05:22:53PM +0300, Vladimir Sementsov-Ogievskiy wrote:
> > Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> > ---
> > 
> > Hi all!
> > 
> > C standard doesn't allow pointer arithmetic on void *.
> > Still, gcc allows it as an extension:
> >  https://gcc.gnu.org/onlinedocs/gcc-4.8.0/gcc/Pointer-Arith.html
> > 
> > I can create a series of patches like this. Do we need it?
> 
> I don't think so, we only care about gcc & clang.

I agree with Dan.

Stefan
diff mbox series

Patch

diff --git a/block/io.c b/block/io.c
index aba67f66b9..539178aed5 100644
--- a/block/io.c
+++ b/block/io.c
@@ -1277,7 +1277,7 @@  static int coroutine_fn bdrv_co_do_copy_on_readv(BdrvChild *child,
      * modifying the image file.  This is critical for zero-copy guest I/O
      * where anything might happen inside guest memory.
      */
-    void *bounce_buffer = NULL;
+    char *bounce_buffer = NULL;
 
     BlockDriver *drv = bs->drv;
     int64_t cluster_offset;