Viewing file: pr99774-1.c (1.59 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Reproducer for report from -Wanalyzer-malloc-leak Reduced from https://git.qemu.org/?p=qemu.git;a=blob;f=subprojects/libvhost-user/libvhost-user.c;h=fab7ca17ee1fb27bcfc338527d1aeb9f923aade5;hb=HEAD#l1184 which is licensed under GNU GPLv2 or later. */
typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint64_t; typedef unsigned long uint64_t; typedef __SIZE_TYPE__ size_t;
extern void *calloc(size_t __nmemb, size_t __size) __attribute__((__nothrow__, __leaf__)) __attribute__((__malloc__)) __attribute__((__alloc_size__(1, 2))) __attribute__((__warn_unused_result__));
typedef struct VuDescStateSplit { uint8_t inflight; uint64_t counter; } VuDescStateSplit;
typedef struct VuVirtqInflight { uint16_t desc_num; VuDescStateSplit desc[]; } VuVirtqInflight;
typedef struct VuVirtqInflightDesc { uint16_t index; uint64_t counter; } VuVirtqInflightDesc;
typedef struct VuVirtq { VuVirtqInflight *inflight; VuVirtqInflightDesc *resubmit_list; uint16_t resubmit_num; uint64_t counter; int inuse; } VuVirtq;
int vu_check_queue_inflights(VuVirtq *vq) { int i = 0;
if (vq->inuse) { vq->resubmit_list = calloc(vq->inuse, sizeof(VuVirtqInflightDesc)); if (!vq->resubmit_list) { return -1; }
for (i = 0; i < vq->inflight->desc_num; i++) { if (vq->inflight->desc[i].inflight) { vq->resubmit_list[vq->resubmit_num].index = i; /* { dg-bogus "leak" } */ vq->resubmit_list[vq->resubmit_num].counter = vq->inflight->desc[i].counter; vq->resubmit_num++; } } }
return 0; }
|