xref: /openbsd-src/gnu/llvm/clang/docs/analyzer/checkers/unix_api_example.c (revision e5dd70708596ae51455a0ffa086a00c5b29f8583)
1*e5dd7070Spatrick 
2*e5dd7070Spatrick // Currently the check is performed for apple targets only.
test(const char * path)3*e5dd7070Spatrick void test(const char *path) {
4*e5dd7070Spatrick   int fd = open(path, O_CREAT);
5*e5dd7070Spatrick     // warn: call to 'open' requires a third argument when the
6*e5dd7070Spatrick     // 'O_CREAT' flag is set
7*e5dd7070Spatrick }
8*e5dd7070Spatrick 
9*e5dd7070Spatrick void f();
10*e5dd7070Spatrick 
test()11*e5dd7070Spatrick void test() {
12*e5dd7070Spatrick   pthread_once_t pred = {0x30B1BCBA, {0}};
13*e5dd7070Spatrick   pthread_once(&pred, f);
14*e5dd7070Spatrick     // warn: call to 'pthread_once' uses the local variable
15*e5dd7070Spatrick }
16*e5dd7070Spatrick 
test()17*e5dd7070Spatrick void test() {
18*e5dd7070Spatrick   void *p = malloc(0); // warn: allocation size of 0 bytes
19*e5dd7070Spatrick }
20*e5dd7070Spatrick 
test()21*e5dd7070Spatrick void test() {
22*e5dd7070Spatrick   void *p = calloc(0, 42); // warn: allocation size of 0 bytes
23*e5dd7070Spatrick }
24*e5dd7070Spatrick 
test()25*e5dd7070Spatrick void test() {
26*e5dd7070Spatrick   void *p = malloc(1);
27*e5dd7070Spatrick   p = realloc(p, 0); // warn: allocation size of 0 bytes
28*e5dd7070Spatrick }
29*e5dd7070Spatrick 
test()30*e5dd7070Spatrick void test() {
31*e5dd7070Spatrick   void *p = alloca(0); // warn: allocation size of 0 bytes
32*e5dd7070Spatrick }
33*e5dd7070Spatrick 
test()34*e5dd7070Spatrick void test() {
35*e5dd7070Spatrick   void *p = valloc(0); // warn: allocation size of 0 bytes
36*e5dd7070Spatrick }
37*e5dd7070Spatrick 
38