blob: e6f5b19baa00e381b017610003c1b52193506725 [file] [log] [blame]
Gabor Martondb4d5f72020-06-22 11:00:02 +02001// RUN: %clang_analyze_cc1 %s \
2// RUN: -analyzer-checker=core \
3// RUN: -analyzer-checker=apiModeling.StdCLibraryFunctions \
4// RUN: -analyzer-config apiModeling.StdCLibraryFunctions:ModelPOSIX=true \
5// RUN: -analyzer-config apiModeling.StdCLibraryFunctions:DisplayLoadedSummaries=true \
6// RUN: -analyzer-checker=debug.ExprInspection \
7// RUN: -analyzer-config eagerly-assume=false \
8// RUN: -triple i686-unknown-linux 2>&1 | FileCheck %s
9
10// CHECK: Loaded summary for: long a64l(const char *str64)
11// CHECK: Loaded summary for: char *l64a(long value)
12// CHECK: Loaded summary for: int access(const char *pathname, int amode)
13// CHECK: Loaded summary for: int faccessat(int dirfd, const char *pathname, int mode, int flags)
14// CHECK: Loaded summary for: int dup(int fildes)
15// CHECK: Loaded summary for: int dup2(int fildes1, int filedes2)
16// CHECK: Loaded summary for: int fdatasync(int fildes)
17// CHECK: Loaded summary for: int fnmatch(const char *pattern, const char *string, int flags)
18// CHECK: Loaded summary for: int fsync(int fildes)
19// CHECK: Loaded summary for: int truncate(const char *path, off_t length)
20// CHECK: Loaded summary for: int symlink(const char *oldpath, const char *newpath)
21// CHECK: Loaded summary for: int symlinkat(const char *oldpath, int newdirfd, const char *newpath)
22// CHECK: Loaded summary for: int lockf(int fd, int cmd, off_t len)
23// CHECK: Loaded summary for: int creat(const char *pathname, mode_t mode)
24// CHECK: Loaded summary for: unsigned int sleep(unsigned int seconds)
25// CHECK: Loaded summary for: int dirfd(DIR *dirp)
26// CHECK: Loaded summary for: unsigned int alarm(unsigned int seconds)
27// CHECK: Loaded summary for: int closedir(DIR *dir)
28// CHECK: Loaded summary for: char *strdup(const char *s)
29// CHECK: Loaded summary for: char *strndup(const char *s, size_t n)
30// CHECK: Loaded summary for: int mkstemp(char *template)
31// CHECK: Loaded summary for: char *mkdtemp(char *template)
32// CHECK: Loaded summary for: char *getcwd(char *buf, size_t size)
33// CHECK: Loaded summary for: int mkdir(const char *pathname, mode_t mode)
34// CHECK: Loaded summary for: int mkdirat(int dirfd, const char *pathname, mode_t mode)
35// CHECK: Loaded summary for: int mknod(const char *pathname, mode_t mode, dev_t dev)
36// CHECK: Loaded summary for: int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev)
37// CHECK: Loaded summary for: int chmod(const char *path, mode_t mode)
38// CHECK: Loaded summary for: int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags)
39// CHECK: Loaded summary for: int fchmod(int fildes, mode_t mode)
40// CHECK: Loaded summary for: int fchownat(int dirfd, const char *pathname, uid_t owner, gid_t group, int flags)
41// CHECK: Loaded summary for: int chown(const char *path, uid_t owner, gid_t group)
42// CHECK: Loaded summary for: int lchown(const char *path, uid_t owner, gid_t group)
43// CHECK: Loaded summary for: int fchown(int fildes, uid_t owner, gid_t group)
44// CHECK: Loaded summary for: int rmdir(const char *pathname)
45// CHECK: Loaded summary for: int chdir(const char *path)
46// CHECK: Loaded summary for: int link(const char *oldpath, const char *newpath)
47// CHECK: Loaded summary for: int linkat(int fd1, const char *path1, int fd2, const char *path2, int flag)
48// CHECK: Loaded summary for: int unlink(const char *pathname)
49// CHECK: Loaded summary for: int unlinkat(int fd, const char *path, int flag)
50// CHECK: Loaded summary for: int fstat(int fd, struct stat *statbuf)
51// CHECK: Loaded summary for: int stat(const char *restrict path, struct stat *restrict buf)
52// CHECK: Loaded summary for: int lstat(const char *restrict path, struct stat *restrict buf)
53// CHECK: Loaded summary for: int fstatat(int fd, const char *restrict path, struct stat *restrict buf, int flag)
54// CHECK: Loaded summary for: DIR *opendir(const char *name)
55// CHECK: Loaded summary for: DIR *fdopendir(int fd)
56// CHECK: Loaded summary for: int isatty(int fildes)
57// CHECK: Loaded summary for: FILE *popen(const char *command, const char *type)
58// CHECK: Loaded summary for: int pclose(FILE *stream)
59// CHECK: Loaded summary for: int close(int fildes)
60// CHECK: Loaded summary for: long fpathconf(int fildes, int name)
61// CHECK: Loaded summary for: long pathconf(const char *path, int name)
62// CHECK: Loaded summary for: FILE *fdopen(int fd, const char *mode)
63// CHECK: Loaded summary for: void rewinddir(DIR *dir)
64// CHECK: Loaded summary for: void seekdir(DIR *dirp, long loc)
65// CHECK: Loaded summary for: int rand_r(unsigned int *seedp)
66// CHECK: Loaded summary for: int strcasecmp(const char *s1, const char *s2)
67// CHECK: Loaded summary for: int strncasecmp(const char *s1, const char *s2, size_t n)
68// CHECK: Loaded summary for: int fileno(FILE *stream)
69// CHECK: Loaded summary for: int fseeko(FILE *stream, off_t offset, int whence)
70// CHECK: Loaded summary for: off_t ftello(FILE *stream)
71// CHECK: Loaded summary for: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset)
72// CHECK: Loaded summary for: void *mmap64(void *addr, size_t length, int prot, int flags, int fd, off64_t offset)
73// CHECK: Loaded summary for: int pipe(int fildes[2])
74// CHECK: Loaded summary for: off_t lseek(int fildes, off_t offset, int whence)
75// CHECK: Loaded summary for: ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize)
76// CHECK: Loaded summary for: ssize_t readlinkat(int fd, const char *restrict path, char *restrict buf, size_t bufsize)
77// CHECK: Loaded summary for: int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath)
78// CHECK: Loaded summary for: char *realpath(const char *restrict file_name, char *restrict resolved_name)
79// CHECK: Loaded summary for: int execv(const char *path, char *const argv[])
80// CHECK: Loaded summary for: int execvp(const char *file, char *const argv[])
81// CHECK: Loaded summary for: int getopt(int argc, char *const argv[], const char *optstring)
82
83long a64l(const char *str64);
84char *l64a(long value);
85int access(const char *pathname, int amode);
86int faccessat(int dirfd, const char *pathname, int mode, int flags);
87int dup(int fildes);
88int dup2(int fildes1, int filedes2);
89int fdatasync(int fildes);
90int fnmatch(const char *pattern, const char *string, int flags);
91int fsync(int fildes);
92typedef unsigned long off_t;
93int truncate(const char *path, off_t length);
94int symlink(const char *oldpath, const char *newpath);
95int symlinkat(const char *oldpath, int newdirfd, const char *newpath);
96int lockf(int fd, int cmd, off_t len);
97typedef unsigned mode_t;
98int creat(const char *pathname, mode_t mode);
99unsigned int sleep(unsigned int seconds);
100typedef struct {
101 int a;
102} DIR;
103int dirfd(DIR *dirp);
104unsigned int alarm(unsigned int seconds);
105int closedir(DIR *dir);
106char *strdup(const char *s);
107typedef typeof(sizeof(int)) size_t;
108char *strndup(const char *s, size_t n);
109/*FIXME How to define wchar_t in the test?*/
110/*typedef __wchar_t wchar_t;*/
111/*wchar_t *wcsdup(const wchar_t *s);*/
112int mkstemp(char *template);
113char *mkdtemp(char *template);
114char *getcwd(char *buf, size_t size);
115int mkdir(const char *pathname, mode_t mode);
116int mkdirat(int dirfd, const char *pathname, mode_t mode);
117typedef int dev_t;
118int mknod(const char *pathname, mode_t mode, dev_t dev);
119int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);
120int chmod(const char *path, mode_t mode);
121int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
122int fchmod(int fildes, mode_t mode);
123typedef int uid_t;
124typedef int gid_t;
125int fchownat(int dirfd, const char *pathname, uid_t owner, gid_t group, int flags);
126int chown(const char *path, uid_t owner, gid_t group);
127int lchown(const char *path, uid_t owner, gid_t group);
128int fchown(int fildes, uid_t owner, gid_t group);
129int rmdir(const char *pathname);
130int chdir(const char *path);
131int link(const char *oldpath, const char *newpath);
132int linkat(int fd1, const char *path1, int fd2, const char *path2, int flag);
133int unlink(const char *pathname);
134int unlinkat(int fd, const char *path, int flag);
135struct stat;
136int fstat(int fd, struct stat *statbuf);
137int stat(const char *restrict path, struct stat *restrict buf);
138int lstat(const char *restrict path, struct stat *restrict buf);
139int fstatat(int fd, const char *restrict path, struct stat *restrict buf, int flag);
140DIR *opendir(const char *name);
141DIR *fdopendir(int fd);
142int isatty(int fildes);
143typedef struct {
144 int x;
145} FILE;
146FILE *popen(const char *command, const char *type);
147int pclose(FILE *stream);
148int close(int fildes);
149long fpathconf(int fildes, int name);
150long pathconf(const char *path, int name);
151FILE *fdopen(int fd, const char *mode);
152void rewinddir(DIR *dir);
153void seekdir(DIR *dirp, long loc);
154int rand_r(unsigned int *seedp);
155int strcasecmp(const char *s1, const char *s2);
156int strncasecmp(const char *s1, const char *s2, size_t n);
157int fileno(FILE *stream);
158int fseeko(FILE *stream, off_t offset, int whence);
159off_t ftello(FILE *stream);
160void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
161typedef off_t off64_t;
162void *mmap64(void *addr, size_t length, int prot, int flags, int fd, off64_t offset);
163int pipe(int fildes[2]);
164off_t lseek(int fildes, off_t offset, int whence);
165typedef size_t ssize_t;
166ssize_t readlink(const char *restrict path, char *restrict buf, size_t bufsize);
167ssize_t readlinkat(int fd, const char *restrict path, char *restrict buf, size_t bufsize);
168int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);
169char *realpath(const char *restrict file_name, char *restrict resolved_name);
170int execv(const char *path, char *const argv[]);
171int execvp(const char *file, char *const argv[]);
172int getopt(int argc, char *const argv[], const char *optstring);
173
174// Must have at least one call expression to initialize the summary map.
175int bar(void);
176void foo() {
177 bar();
178}