Fix compiler warnings about zero-length arrays in inline bitops

The compiler appears to be expanding the unused NULL pointer into a
zero-length array via the inline bitops code. When -Werror=array-bounds
is used, this causes a build failure. Recommended solution is allocate
temporary structures, fill with zeros (to avoid uninitialized data use
warnings), and pass the pointer to those to the inline calls.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Coleman Kane <ckane@colemankane.org>
Closes #13463 
Closes #13465
This commit is contained in:
Coleman Kane 2022-05-17 16:07:39 -04:00 committed by GitHub
parent 276b08cb00
commit c0cf6ed679
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -93,8 +93,10 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_DISCARD], [
ZFS_LINUX_TEST_SRC([blk_queue_discard], [ ZFS_LINUX_TEST_SRC([blk_queue_discard], [
#include <linux/blkdev.h> #include <linux/blkdev.h>
],[ ],[
struct request_queue *q __attribute__ ((unused)) = NULL; struct request_queue r;
struct request_queue *q = &r;
int value __attribute__ ((unused)); int value __attribute__ ((unused));
memset(q, 0, sizeof(r));
value = blk_queue_discard(q); value = blk_queue_discard(q);
]) ])
]) ])
@ -119,16 +121,20 @@ AC_DEFUN([ZFS_AC_KERNEL_SRC_BLK_QUEUE_SECURE_ERASE], [
ZFS_LINUX_TEST_SRC([blk_queue_secure_erase], [ ZFS_LINUX_TEST_SRC([blk_queue_secure_erase], [
#include <linux/blkdev.h> #include <linux/blkdev.h>
],[ ],[
struct request_queue *q __attribute__ ((unused)) = NULL; struct request_queue r;
struct request_queue *q = &r;
int value __attribute__ ((unused)); int value __attribute__ ((unused));
memset(q, 0, sizeof(r));
value = blk_queue_secure_erase(q); value = blk_queue_secure_erase(q);
]) ])
ZFS_LINUX_TEST_SRC([blk_queue_secdiscard], [ ZFS_LINUX_TEST_SRC([blk_queue_secdiscard], [
#include <linux/blkdev.h> #include <linux/blkdev.h>
],[ ],[
struct request_queue *q __attribute__ ((unused)) = NULL; struct request_queue r;
struct request_queue *q = &r;
int value __attribute__ ((unused)); int value __attribute__ ((unused));
memset(q, 0, sizeof(r));
value = blk_queue_secdiscard(q); value = blk_queue_secdiscard(q);
]) ])
]) ])