diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/Analysis/diagnostics/false-positive-suppression.c | 23 | ||||
-rw-r--r-- | test/Analysis/diagnostics/include/sys/queue.h | 5 |
2 files changed, 28 insertions, 0 deletions
diff --git a/test/Analysis/diagnostics/false-positive-suppression.c b/test/Analysis/diagnostics/false-positive-suppression.c new file mode 100644 index 0000000000..420a573380 --- /dev/null +++ b/test/Analysis/diagnostics/false-positive-suppression.c @@ -0,0 +1,23 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,unix -verify %s +// expected-no-diagnostics + +#include "include/sys/queue.h" + +typedef __typeof(sizeof(int)) size_t; +void *malloc(size_t); + +int radar12491259() { + int *p = malloc(12); + FREE_POINTER(p); + FREE_POINTER(p); // no-warning: we are suppressing errors coming from sys/queue macros. + return 0; +} + +#define MYMACRO(p) FREE_POINTER(p) + +int radar12491259_inside_macro() { + int *p = malloc(12); + MYMACRO(p); + MYMACRO(p); // no-warning: we are suppressing errors coming from sys/queue macros. + return 0; +} diff --git a/test/Analysis/diagnostics/include/sys/queue.h b/test/Analysis/diagnostics/include/sys/queue.h new file mode 100644 index 0000000000..e5698ed443 --- /dev/null +++ b/test/Analysis/diagnostics/include/sys/queue.h @@ -0,0 +1,5 @@ +#pragma clang system_header + +void free(void *); +#define FREE_POINTER(x) free(x) + |