blob: 8f74468f849b96e3d5acf0075d469f140a4dad5b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
/* Reproducer for false positive from -Wanalyzer-deref-before-check
seen on Linux kernel's block/bdev.c due to -fanalyzer mishandling
inlined functions. */
/* { dg-additional-options "-O2 -g -fno-delete-null-pointer-checks" } */
typedef unsigned char u8;
struct inode {
void *i_mapping;
u8 i_blkbits;
};
struct block_device {
struct inode *bd_inode;
};
int sync_blockdev(struct block_device *bdev);
int set_blocksize(struct block_device *bdev, u8 size) {
if (bdev->bd_inode->i_blkbits != size) { /* { dg-bogus "pointer 'bdev' is dereferenced here" } */
sync_blockdev(bdev);
}
return 0;
}
extern int filemap_write_and_wait(void *);
int sync_blockdev(struct block_device *bdev) {
if (!bdev) /* { dg-bogus "check of 'bdev' for NULL after already dereferencing it" } */
return 0;
return filemap_write_and_wait(bdev->bd_inode->i_mapping);
}
|