martong updated this revision to Diff 262366.
martong added a comment.

- Fix file descriptor params to have proper range value
- usleep 1000000 -> 999999
- Fix fstat family


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D79433/new/

https://reviews.llvm.org/D79433

Files:
  clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp

Index: clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp
===================================================================
--- clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp
+++ clang/lib/StaticAnalyzer/Checkers/StdLibraryFunctionsChecker.cpp
@@ -790,7 +790,10 @@
   // or long long, so three summary variants would be enough).
   // Of course, function variants are also useful for C++ overloads.
   const QualType IntTy = ACtx.IntTy;
+  const QualType SizeTy = ACtx.getSizeType();
   const QualType VoidPtrTy = ACtx.VoidPtrTy; // void *
+  const QualType ConstVoidPtrTy =
+      ACtx.getPointerType(ACtx.VoidTy.withConst()); // const void *
   const QualType ConstCharPtrTy =
       ACtx.getPointerType(ACtx.CharTy.withConst()); // const char *
 
@@ -1077,6 +1080,1320 @@
       Summary(NoEvalCall)
           .Case({ReturnValueCondition(WithinRange, {{-1, -1}, {1, Max}})}));
 
+  // POSIX
+
+  // long a64l(const char *str64);
+  addToFunctionSummaryMap("a64l",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *l64a(long value);        The behavior of l64a() is undefined when
+  // value is negative.
+  addToFunctionSummaryMap("l64a", Summary(NoEvalCall)
+                                      .ArgConstraint(ArgumentCondition(
+                                          0, WithinRange, Range(0, Max))));
+
+  // int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+  addToFunctionSummaryMap("accept", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max))));
+
+  // int access(const char *pathname, int amode);
+  addToFunctionSummaryMap("access",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int bind(int socket, const struct sockaddr *address, socklen_t
+  // address_len);
+  addToFunctionSummaryMap(
+      "bind",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+          // FIXME The below param is actually a transparent union in C
+          // (__CONST_SOCKADDR_ARG). We should be able to handle transparent
+          // union of pointers as a pointer. See the attribute
+          // __transparent_union__ .
+          //.ArgConstraint(NotNull(ArgNo(1)))
+          .ArgConstraint(BufferSize(1, 2))
+          .ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  // int listen(int sockfd, int backlog);
+  addToFunctionSummaryMap("listen", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max))));
+
+  // int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+  addToFunctionSummaryMap(
+      "getpeername",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+          // FIXME The below param is actually a transparent union in C
+          // (__CONST_SOCKADDR_ARG). We should be able to handle transparent
+          // union of pointers as a pointer. See the attribute
+          // __transparent_union__ .
+          //.ArgConstraint(NotNull(ArgNo(1)))
+          .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+  addToFunctionSummaryMap(
+      "getsockname",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+          // FIXME The below param is actually a transparent union in C
+          // (__CONST_SOCKADDR_ARG). We should be able to handle transparent
+          // union of pointers as a pointer. See the attribute
+          // __transparent_union__ .
+          //.ArgConstraint(NotNull(ArgNo(1)))
+          .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int connect(int socket, const struct sockaddr *address, socklen_t
+  // address_len);
+  addToFunctionSummaryMap(
+      "connect",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+      // FIXME The below param is actually a transparent union in C
+      // (__CONST_SOCKADDR_ARG). We should be able to handle transparent
+      // union of pointers as a pointer. See the attribute
+      // __transparent_union__ .
+      //.ArgConstraint(NotNull(ArgNo(1)))
+  );
+
+  // int dup(int fildes);   char *strdup(const char *s);    char *strndup(const
+  // char *s, size_t n);    wchar_t *wcsdup(const wchar_t *s);
+  addToFunctionSummaryMap("dup", Summary(NoEvalCall)
+                                     .ArgConstraint(ArgumentCondition(
+                                         0, WithinRange, Range(0, Max))));
+
+  // int dup2(int fildes1, int filedes2);
+  addToFunctionSummaryMap(
+      "dup2",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(0, Max))));
+
+  // void FD_CLR(int fd, fd_set *set);
+  addToFunctionSummaryMap("FD_CLR", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max)))
+                                        .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int FD_ISSET(int fd, fd_set *set);
+  addToFunctionSummaryMap("FD_ISSET", Summary(NoEvalCall)
+                                          .ArgConstraint(ArgumentCondition(
+                                              0, WithinRange, Range(0, Max)))
+                                          .ArgConstraint(NotNull(ArgNo(1))));
+
+  // void FD_SET(int fd, fd_set *set);
+  addToFunctionSummaryMap("FD_SET", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max)))
+                                        .ArgConstraint(NotNull(ArgNo(1))));
+
+  // void FD_ZERO(fd_set *set);
+  addToFunctionSummaryMap("FD_ZERO",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int fdatasync(int fildes);
+  addToFunctionSummaryMap("fdatasync", Summary(NoEvalCall)
+                                           .ArgConstraint(ArgumentCondition(
+                                               0, WithinRange, Range(0, Max))));
+
+  // int fnmatch(const char *pattern, const char *string, int flags);
+  addToFunctionSummaryMap("fnmatch", Summary(EvalCallAsPure)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int fsync(int fildes);
+  addToFunctionSummaryMap("fsync", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // int truncate(const char *path, off_t length);    int ftruncate(int fd,
+  // off_t length);
+  addToFunctionSummaryMap("truncate",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int flock(int fd, int operation);
+  addToFunctionSummaryMap("flock", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // int lockf(int fd, int cmd, off_t len);
+  addToFunctionSummaryMap("lockf", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // int symlinkat(const char *oldpath, int newdirfd, const char *newpath);
+  addToFunctionSummaryMap("symlinkat", Summary(NoEvalCall)
+                                           .ArgConstraint(NotNull(ArgNo(0)))
+                                           .ArgConstraint(ArgumentCondition(
+                                               1, WithinRange, Range(0, Max)))
+                                           .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int symlink(const char *oldpath, const char *newpath);
+  addToFunctionSummaryMap("symlink", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(NotNull(ArgNo(1))));
+
+  // void *dlopen(const char *file, int mode);    int open(const char *pathname,
+  // int flags)    int open(const char *pathname, int flags, mode_t mode); FILE
+  // *popen(const char *command, const char *type);    FILE *fdopen(int fd,
+  // const char *mode);    mqd_t mq_open(const char *name, int oflag, ...); DBM
+  // *dbm_open(const char *file, int open_flags, mode_t file_mode);    nl_catd
+  // catopen(const char *name, int oflag);
+  addToFunctionSummaryMap("open",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int openat(int dirfd, const char *pathname, int flags);    int openat(int
+  // dirfd, const char *pathname, int flags, mode_t mode);
+  addToFunctionSummaryMap("openat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int creat(const char *pathname, mode_t mode);
+  addToFunctionSummaryMap("creat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // unsigned int sleep(unsigned int seconds);    int usleep(useconds_t
+  // useconds); The obsolescent function 'usleep' is called. POSIX.1-2001
+  // declares usleep() function obsolescent and POSIX.1-2008 removes it. It is
+  // recommended that new applications use the 'nanosleep' or 'setitimer'
+  // function.</warn>   int nanosleep(const struct timespec *rqtp, struct
+  // timespec *rmtp);
+  addToFunctionSummaryMap("sleep", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // int usleep(useconds_t useconds); The obsolescent function 'usleep' is
+  // called. POSIX.1-2001 declares usleep() function obsolescent and
+  // POSIX.1-2008 removes it. It is recommended that new applications use the
+  // 'nanosleep' or 'setitimer' function.</warn>
+  addToFunctionSummaryMap(
+      "usleep",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, 999999))));
+
+  // int dirfd(DIR *dirp);
+  addToFunctionSummaryMap("dirfd",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int faccessat(int dirfd, const char *pathname, int mode, int flags);
+  addToFunctionSummaryMap("faccessat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // unsigned int alarm(unsigned int seconds);    useconds_t ualarm(useconds_t
+  // useconds, useconds_t interval);
+  addToFunctionSummaryMap("alarm", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // struct rpcent *getrpcbyname(char *name);
+  addToFunctionSummaryMap("getrpcbyname",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct protoent *getprotobyname(const char *name);
+  addToFunctionSummaryMap("getprotobyname",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct servent *getservbyname(const char *name, const char *proto);
+  addToFunctionSummaryMap("getservbyname",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct netent *getnetbyname(const char *name);
+  addToFunctionSummaryMap("getnetbyname",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct hostent *gethostbyname(const char *name);
+  addToFunctionSummaryMap("gethostbyname",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct hostent *gethostbyname2(const char *name, int af);
+  addToFunctionSummaryMap("gethostbyname2",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct hostent *gethostbyaddr(const void *addr, socklen_t len, int type);
+  addToFunctionSummaryMap("gethostbyaddr",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int brk(void *addr);    void *sbrk(intptr_t incr);
+  addToFunctionSummaryMap("brk",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int closedir(DIR *dir);
+  addToFunctionSummaryMap("closedir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *strfry(char *string);
+  addToFunctionSummaryMap("strfry",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *strsep(char **stringp, const char *delim);
+  addToFunctionSummaryMap("strsep", Summary(NoEvalCall)
+                                        .ArgConstraint(NotNull(ArgNo(0)))
+                                        .ArgConstraint(NotNull(ArgNo(1))));
+
+  // char *strdup(const char *s);
+  addToFunctionSummaryMap("strdup",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *strndup(const char *s, size_t n);
+  addToFunctionSummaryMap("strndup", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(ArgumentCondition(
+                                             1, WithinRange, Range(0, Max))));
+
+  // wchar_t *wcsdup(const wchar_t *s);
+  addToFunctionSummaryMap("wcsdup",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int mkstemp(char *template);
+  addToFunctionSummaryMap("mkstemp",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *mkdtemp(char *template);
+  addToFunctionSummaryMap("mkdtemp",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *mktemp(char *template);
+  addToFunctionSummaryMap("mktemp",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *getcwd(char *buf, size_t size);
+  addToFunctionSummaryMap("getcwd", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            1, WithinRange, Range(0, Max))));
+
+  // int mkdir(const char *pathname, mode_t mode);
+  addToFunctionSummaryMap("mkdir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int mknod(const char *pathname, mode_t mode, dev_t dev);
+  addToFunctionSummaryMap("mknod",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int mknodat(int dirfd, const char *pathname, mode_t mode, dev_t dev);
+  addToFunctionSummaryMap("mknodat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int mkdirat(int dirfd, const char *pathname, mode_t mode);
+  addToFunctionSummaryMap("mkdirat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int fchmodat(int dirfd, const char *pathname, mode_t mode, int flags);
+  addToFunctionSummaryMap("fchmodat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int fchownat(int dirfd, const char *pathname, uid_t owner, gid_t group, int
+  // flags);
+  addToFunctionSummaryMap("fchownat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int rmdir(const char *pathname);
+  addToFunctionSummaryMap("rmdir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int chdir(const char *path);
+  addToFunctionSummaryMap("chdir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int chroot(const char *path);
+  addToFunctionSummaryMap("chroot",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int symlink(const char *oldpath, const char *newpath);    int link(const
+  // char *oldpath, const char *newpath);    int unlink(const char *pathname);
+  // int mq_unlink(const char *name);    ssize_t readlink(const char *path, char
+  // *buf, size_t bufsiz);
+  addToFunctionSummaryMap("link", Summary(NoEvalCall)
+                                      .ArgConstraint(NotNull(ArgNo(0)))
+                                      .ArgConstraint(NotNull(ArgNo(1))));
+
+  // linkat(int fd1, const char *path1, int fd2, const char *path2, int flag);
+  addToFunctionSummaryMap("linkat", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max)))
+                                        .ArgConstraint(NotNull(ArgNo(1)))
+                                        .ArgConstraint(ArgumentCondition(
+                                            2, WithinRange, Range(0, Max)))
+                                        .ArgConstraint(NotNull(ArgNo(3))));
+
+  // int unlinkat(int fd, const char *path, int flag);
+  addToFunctionSummaryMap("unlinkat", Summary(NoEvalCall)
+                                          .ArgConstraint(ArgumentCondition(
+                                              0, WithinRange, Range(0, Max)))
+                                          .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int unlink(const char *pathname);    int mq_unlink(const char *name);
+  addToFunctionSummaryMap("unlink",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int stat(const char *file_name, struct stat *buf);
+  addToFunctionSummaryMap("stat", Summary(NoEvalCall)
+                                      .ArgConstraint(NotNull(ArgNo(0)))
+                                      .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int lstat(const char *file_name, struct stat *buf);
+  addToFunctionSummaryMap("lstat", Summary(NoEvalCall)
+                                       .ArgConstraint(NotNull(ArgNo(0)))
+                                       .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int fstat(int fd, struct stat *statbuf);
+  addToFunctionSummaryMap("fstat", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max)))
+                                       .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int fstatat(int dirfd, const char *pathname, struct stat *statbuf, int
+  // flags);
+  addToFunctionSummaryMap("fstatat", Summary(NoEvalCall)
+                                         .ArgConstraint(ArgumentCondition(
+                                             0, WithinRange, Range(0, Max)))
+                                         .ArgConstraint(NotNull(ArgNo(1)))
+                                         .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int fstatat64(int dirfd, const char *pathname, struct stat64  *statbuf,
+  // int flags);
+  // Note: fstatat64() is a large-file version of the fstatat() function as
+  // defined in POSIX 1003.1-2008 (ISO/IEC 9945-2009).
+  addToFunctionSummaryMap("fstatat64", Summary(NoEvalCall)
+                                           .ArgConstraint(ArgumentCondition(
+                                               0, WithinRange, Range(0, Max)))
+                                           .ArgConstraint(NotNull(ArgNo(1)))
+                                           .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int __fxstatat64 (int __ver, int __fildes, const char *__filename,
+  //			 struct stat64 *__stat_buf, int __flag)
+  addToFunctionSummaryMap(
+      "__fxstatat64",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(0, Max)))
+          .ArgConstraint(NotNull(ArgNo(2)))
+          .ArgConstraint(NotNull(ArgNo(3))));
+
+  // int chmod(const char *path, mode_t mode);    int fchmod(int fildes, mode_t
+  // mode);
+  addToFunctionSummaryMap("chmod",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int fchmod(int fildes, mode_t mode);
+  addToFunctionSummaryMap("fchmod", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max))));
+
+  // int chown(const char *path, uid_t owner, gid_t group);    int lchown(const
+  // char *path, uid_t owner, gid_t group);    int fchown(int fildes, uid_t
+  // owner, gid_t group);
+  addToFunctionSummaryMap("chown",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int lchown(const char *path, uid_t owner, gid_t group);
+  addToFunctionSummaryMap("lchown",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int fchown(int fildes, uid_t owner, gid_t group);
+  addToFunctionSummaryMap("fchown", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max))));
+
+  // int utime(const char *filename, struct utimbuf *buf);
+  addToFunctionSummaryMap("utime",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int futimens(int fd, const struct timespec times[2]);
+  addToFunctionSummaryMap("futimens", Summary(NoEvalCall)
+                                          .ArgConstraint(ArgumentCondition(
+                                              0, WithinRange, Range(0, Max))));
+
+  // int utimensat(int dirfd, const char *pathname, const struct timespec
+  // times[2], int flags);
+  addToFunctionSummaryMap("utimensat",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int utimes(const char *filename, const struct timeval times[2]);
+  addToFunctionSummaryMap("utimes",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // DIR *opendir(const char *name);    DIR *fdopendir(int fd);
+  addToFunctionSummaryMap("opendir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // DIR *fdopendir(int fd);
+  addToFunctionSummaryMap("fdopendir", Summary(NoEvalCall)
+                                           .ArgConstraint(ArgumentCondition(
+                                               0, WithinRange, Range(0, Max))));
+
+  // int isatty(int fildes);
+  addToFunctionSummaryMap("isatty", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max))));
+
+  // FILE *popen(const char *command, const char *type);
+  addToFunctionSummaryMap("popen", Summary(NoEvalCall)
+                                       .ArgConstraint(NotNull(ArgNo(0)))
+                                       .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int pclose(FILE *stream);
+  addToFunctionSummaryMap("pclose",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int setsockopt(int socket, int level, int option_name,
+  addToFunctionSummaryMap(
+      "setsockopt",
+      Summary(NoEvalCall)
+          .ArgConstraint(NotNull(ArgNo(3)))
+          .ArgConstraint(BufferSize(3, 4))
+          .ArgConstraint(ArgumentCondition(4, WithinRange, Range(0, Max))));
+
+  // int getsockopt(int socket, int level, int option_name,
+  addToFunctionSummaryMap("getsockopt", Summary(NoEvalCall)
+                                            .ArgConstraint(NotNull(ArgNo(3)))
+                                            .ArgConstraint(NotNull(ArgNo(4))));
+
+  // int dlclose(void *handle);    int pclose(FILE *stream);    int close(int
+  // fildes);    int mq_close(mqd_t);    void dbm_close(DBM *db);    int
+  // catclose(nl_catd catd);
+  addToFunctionSummaryMap("close", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // size_t confstr(int, char *, size_t);
+  addToFunctionSummaryMap("confstr", Summary(NoEvalCall)
+                                         .ArgConstraint(ArgumentCondition(
+                                             2, WithinRange, Range(0, Max))));
+
+  // long int fpathconf(int fildes, int name);
+  addToFunctionSummaryMap("fpathconf", Summary(NoEvalCall)
+                                           .ArgConstraint(ArgumentCondition(
+                                               0, WithinRange, Range(0, Max))));
+
+  // long int fpathconf(int fildes, int name);    long int pathconf(const char
+  // *path, int name);
+  addToFunctionSummaryMap("pathconf",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // FILE *fdopen(int fd, const char *mode);
+  addToFunctionSummaryMap("fdopen", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max)))
+                                        .ArgConstraint(NotNull(ArgNo(1))));
+
+  // void rewinddir(DIR *dir);
+  addToFunctionSummaryMap("rewinddir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // void seekdir(DIR *dirp, long loc);
+  addToFunctionSummaryMap("seekdir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int rand_r(unsigned int *seedp);
+  addToFunctionSummaryMap("rand_r",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int strcasecmp(const char *s1, const char *s2);
+  addToFunctionSummaryMap("strcasecmp", Summary(EvalCallAsPure)
+                                            .ArgConstraint(NotNull(ArgNo(0)))
+                                            .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int strncasecmp(const char *s1, const char *s2, size_t n);
+  addToFunctionSummaryMap(
+      "strncasecmp",
+      Summary(EvalCallAsPure)
+          .ArgConstraint(NotNull(ArgNo(0)))
+          .ArgConstraint(NotNull(ArgNo(1)))
+          .ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  // ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
+  addToFunctionSummaryMap(
+      "sendfile",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(0, Max)))
+          .ArgConstraint(ArgumentCondition(3, WithinRange, Range(1, Max))));
+
+  // ssize_t read(int fd, void *buf, size_t count);
+  // addToFunctionSummaryMap(
+  //"read",
+  // Summary(NoEvalCall)
+  //.ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+  //.ArgConstraint(BufferSize(1, 2))
+  //.ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  //// ssize_t write(int fildes, const void *buf, size_t nbyte);
+  // addToFunctionSummaryMap(
+  //"write",
+  // Summary(NoEvalCall)
+  //.ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+  //.ArgConstraint(BufferSize(1, 2))
+  //.ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  // ssize_t recv(int sockfd, void *buf, size_t len, int flags);
+  addToFunctionSummaryMap("recv", Summary(NoEvalCall)
+                                      .ArgConstraint(ArgumentCondition(
+                                          0, WithinRange, Range(0, Max)))
+                                      .ArgConstraint(BufferSize(1, 2)));
+
+  // ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
+  addToFunctionSummaryMap("recvfrom", Summary(NoEvalCall)
+                                          .ArgConstraint(ArgumentCondition(
+                                              0, WithinRange, Range(0, Max)))
+                                          .ArgConstraint(BufferSize(1, 2)));
+
+  // ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags);
+  addToFunctionSummaryMap("recvmsg", Summary(NoEvalCall)
+                                         .ArgConstraint(ArgumentCondition(
+                                             0, WithinRange, Range(0, Max))));
+
+  // ssize_t send(int sockfd, const void *buf, size_t len, int flags);    int
+  // mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned
+  // msg_prio);    int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t
+  // msg_len, unsigned msg_prio, const struct timespec *abstime);
+  addToFunctionSummaryMap("send", Summary(NoEvalCall)
+                                      .ArgConstraint(ArgumentCondition(
+                                          0, WithinRange, Range(0, Max)))
+                                      .ArgConstraint(BufferSize(1, 2)));
+
+  // ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
+  addToFunctionSummaryMap("sendto", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max)))
+                                        .ArgConstraint(BufferSize(1, 2)));
+
+  // ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
+  addToFunctionSummaryMap("sendmsg", Summary(NoEvalCall)
+                                         .ArgConstraint(ArgumentCondition(
+                                             0, WithinRange, Range(0, Max))));
+
+  // void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t
+  // offset);
+  addToFunctionSummaryMap(
+      "mmap",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(1, Max)))
+          .ArgConstraint(ArgumentCondition(4, WithinRange, Range(0, Max))));
+
+  // void *mmap64(void *addr, size_t length, int prot, int flags, int fd,
+  // off64_t offset);
+  addToFunctionSummaryMap(
+      "mmap64",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(1, Max)))
+          .ArgConstraint(ArgumentCondition(4, WithinRange, Range(0, Max))));
+
+  // int munmap(void *addr, size_t length);
+  addToFunctionSummaryMap("munmap", Summary(NoEvalCall)
+                                        .ArgConstraint(NotNull(ArgNo(0)))
+                                        .ArgConstraint(ArgumentCondition(
+                                            1, WithinRange, Range(1, Max))));
+
+  // int fcntl(int fd, int cmd, ... /* arg */ );
+  addToFunctionSummaryMap("fcntl", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // int ioctl(int fd, unsigned long request, ...);
+  addToFunctionSummaryMap("ioctl", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // int socketpair(int domain, int type, int protocol, int sv[2]);
+  addToFunctionSummaryMap("socketpair",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(3))));
+
+  // int pipe(int fildes[2]);
+  addToFunctionSummaryMap("pipe",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *getwd(char *path_name);
+  addToFunctionSummaryMap("getwd",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int mq_notify(mqd_t, const struct sigevent *);
+  addToFunctionSummaryMap("mq_notify",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned
+  // *msg_prio);
+  addToFunctionSummaryMap(
+      "mq_receive",
+      Summary(NoEvalCall)
+          .ArgConstraint(BufferSize(1, 2))
+          .ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  // int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned
+  // msg_prio);
+  addToFunctionSummaryMap("mq_send",
+                          Summary(NoEvalCall).ArgConstraint(BufferSize(1, 2)));
+
+  // ssize_t mq_timedreceive(mqd_t mqdes, char *restrict msg_ptr, size_t
+  // msg_len, unsigned *restrict msg_prio, const struct timespec *restrict
+  // abstime);
+  addToFunctionSummaryMap("mq_timedreceive",
+                          Summary(NoEvalCall).ArgConstraint(BufferSize(1, 2)));
+
+  // int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned
+  // msg_prio, const struct timespec *abstime);
+  addToFunctionSummaryMap("mq_timedsend",
+                          Summary(NoEvalCall).ArgConstraint(BufferSize(1, 2)));
+
+  // int mq_unlink(const char *name);
+  addToFunctionSummaryMap("mq_unlink",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int dbm_clearerr(DBM *db);
+  addToFunctionSummaryMap("dbm_clearerr",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // void dbm_close(DBM *db);
+  addToFunctionSummaryMap("dbm_close",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int dbm_delete(DBM *db, datum key);
+  addToFunctionSummaryMap("dbm_delete",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int dbm_error(DBM *db);
+  addToFunctionSummaryMap("dbm_error",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // datum dbm_fetch(DBM *db, datum key);
+  addToFunctionSummaryMap("dbm_fetch",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // datum dbm_firstkey(DBM *db);
+  addToFunctionSummaryMap("dbm_firstkey",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // datum dbm_nextkey(DBM *db);
+  addToFunctionSummaryMap("dbm_nextkey",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // DBM *dbm_open(const char *file, int open_flags, mode_t file_mode);
+  addToFunctionSummaryMap("dbm_open",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int dbm_store(DBM *db, datum key, datum content, int store_mode);
+  addToFunctionSummaryMap("dbm_store",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // void freeaddrinfo(struct addrinfo *ai);
+  addToFunctionSummaryMap("freeaddrinfo",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int getnameinfo(const struct sockaddr *restrict sa,
+  addToFunctionSummaryMap(
+      "getnameinfo",
+      Summary(NoEvalCall)
+          .ArgConstraint(BufferSize(0, 1))
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(0, Max)))
+          .ArgConstraint(BufferSize(2, 3))
+          .ArgConstraint(ArgumentCondition(3, WithinRange, Range(0, Max)))
+          .ArgConstraint(BufferSize(4, 5))
+          .ArgConstraint(ArgumentCondition(5, WithinRange, Range(0, Max))));
+
+  // int uname(struct utsname *buf);
+  addToFunctionSummaryMap("uname",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *strtok_r(char *str, const char *delim, char **saveptr);
+  addToFunctionSummaryMap("strtok_r", Summary(EvalCallAsPure)
+                                          .ArgConstraint(NotNull(ArgNo(1)))
+                                          .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int getpwnam_r(const char *name, struct passwd *pwd, char *buffer, size_t
+  // bufsize, struct passwd **result);
+  addToFunctionSummaryMap(
+      "getpwnam_r",
+      Summary(NoEvalCall)
+          .ArgConstraint(BufferSize(2, 3))
+          .ArgConstraint(ArgumentCondition(3, WithinRange, Range(0, Max))));
+
+  // int getpwuid_r(uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize,
+  // struct passwd **result);
+  addToFunctionSummaryMap(
+      "getpwuid_r",
+      Summary(NoEvalCall)
+          .ArgConstraint(BufferSize(2, 3))
+          .ArgConstraint(ArgumentCondition(3, WithinRange, Range(0, Max))));
+
+  // nl_catd catopen(const char *name, int oflag);
+  addToFunctionSummaryMap("catopen",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int regcomp(regex_t *restrict preg, const char *restrict pattern, int
+  // cflags);
+  addToFunctionSummaryMap("regcomp",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // size_t regerror(int errcode, const regex_t *restrict preg, char *restrict
+  // errbuf, size_t errbuf_size);
+  addToFunctionSummaryMap("regerror", Summary(NoEvalCall)
+                                          .ArgConstraint(BufferSize(2, 3))
+                                          .ArgConstraint(ArgumentCondition(
+                                              3, WithinRange, Range(0, Max))));
+
+  // int regexec(const regex_t *restrict preg, const char *restrict string,
+  // size_t nmatch, regmatch_t pmatch[restrict], int eflags);
+  addToFunctionSummaryMap("regexec", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(NotNull(ArgNo(1)))
+                                         .ArgConstraint(ArgumentCondition(
+                                             2, WithinRange, Range(0, Max))));
+
+  // void regfree(regex_t *preg);
+  addToFunctionSummaryMap("regfree",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int sched_getparam(pid_t pid, struct sched_param *param);
+  addToFunctionSummaryMap(
+      "sched_getparam",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+          .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int sched_getscheduler(pid_t pid);
+  addToFunctionSummaryMap(
+      "sched_getscheduler",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max))));
+
+  // int sched_rr_get_interval(pid_t pid, struct timespec *interval);
+  addToFunctionSummaryMap("sched_rr_get_interval",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int sched_setscheduler(pid_t pid, int policy, const struct sched_param
+  // *param);
+  addToFunctionSummaryMap(
+      "sched_setscheduler",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max))));
+
+  // char *ecvt(double value, int ndigit, int *restrict decpt, int *restrict
+  // sign);
+  addToFunctionSummaryMap("ecvt", Summary(NoEvalCall)
+                                      .ArgConstraint(NotNull(ArgNo(2)))
+                                      .ArgConstraint(NotNull(ArgNo(3))));
+
+  // char *fcvt(double value, int ndigit, int *restrict decpt, int *restrict
+  // sign);
+  addToFunctionSummaryMap("fcvt", Summary(NoEvalCall)
+                                      .ArgConstraint(NotNull(ArgNo(2)))
+                                      .ArgConstraint(NotNull(ArgNo(3))));
+
+  // char *gcvt(double value, int ndigit, char *buf);
+  addToFunctionSummaryMap("gcvt",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(2))));
+
+  // off_t lseek(int fildes, off_t offset, int whence);
+  addToFunctionSummaryMap("lseek", Summary(NoEvalCall)
+                                       .ArgConstraint(ArgumentCondition(
+                                           0, WithinRange, Range(0, Max))));
+
+  // int nanosleep(const struct timespec *rqtp, struct timespec *rmtp);
+  addToFunctionSummaryMap("nanosleep",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // void setkey(const char *key);
+  addToFunctionSummaryMap("setkey",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *getpass(const char *prompt);
+  addToFunctionSummaryMap("getpass",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int putenv(char *string);
+  addToFunctionSummaryMap("putenv",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int setenv(const char *envname, const char *envval, int overwrite);    int
+  // unsetenv(const char *name);
+  addToFunctionSummaryMap("setenv", Summary(NoEvalCall)
+                                        .ArgConstraint(NotNull(ArgNo(0)))
+                                        .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int unsetenv(const char *name);
+  addToFunctionSummaryMap("unsetenv",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct tm *localtime_r(const time_t *timep, struct tm *result);
+  addToFunctionSummaryMap("localtime_r", Summary(NoEvalCall)
+                                             .ArgConstraint(NotNull(ArgNo(0)))
+                                             .ArgConstraint(NotNull(ArgNo(1))));
+
+  // struct dirent *readdir(DIR *dirp);
+  addToFunctionSummaryMap("readdir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result);
+  addToFunctionSummaryMap("readdir_r", Summary(NoEvalCall)
+                                           .ArgConstraint(NotNull(ArgNo(0)))
+                                           .ArgConstraint(NotNull(ArgNo(1)))
+                                           .ArgConstraint(NotNull(ArgNo(2))));
+
+  // ssize_t readlink(const char *path, char *buf, size_t bufsiz);
+  addToFunctionSummaryMap("readlink", Summary(NoEvalCall)
+                                          .ArgConstraint(NotNull(ArgNo(0)))
+                                          .ArgConstraint(NotNull(ArgNo(1)))
+                                          .ArgConstraint(BufferSize(1, 2))
+                                          .ArgConstraint(ArgumentCondition(
+                                              2, WithinRange, Range(0, Max))));
+
+  // int renameat(int olddirfd, const char *oldpath, int newdirfd, const char
+  // *newpath);
+  addToFunctionSummaryMap("renameat", Summary(NoEvalCall)
+                                          .ArgConstraint(NotNull(ArgNo(1)))
+                                          .ArgConstraint(NotNull(ArgNo(3))));
+
+  // int readlinkat(int dirfd, const char *pathname, char *buf, size_t bufsiz);
+  addToFunctionSummaryMap(
+      "readlinkat",
+      Summary(NoEvalCall)
+          .ArgConstraint(NotNull(ArgNo(1)))
+          .ArgConstraint(NotNull(ArgNo(2)))
+          .ArgConstraint(BufferSize(2, 3))
+          .ArgConstraint(ArgumentCondition(3, WithinRange, Range(0, Max))));
+
+  // char *asctime_r(const struct tm *tm, char *buf);
+  addToFunctionSummaryMap("asctime_r", Summary(NoEvalCall)
+                                           .ArgConstraint(NotNull(ArgNo(0)))
+                                           .ArgConstraint(NotNull(ArgNo(1))));
+
+  // char *asctime_r(const struct tm *tm, char *buf);    char *ctime_r(const
+  // time_t *timep, char *buf);
+  addToFunctionSummaryMap("ctime_r", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(NotNull(ArgNo(1))));
+
+  // struct tm *gmtime_r(const time_t *timep, struct tm *result);
+  addToFunctionSummaryMap("gmtime_r", Summary(NoEvalCall)
+                                          .ArgConstraint(NotNull(ArgNo(0)))
+                                          .ArgConstraint(NotNull(ArgNo(1))));
+
+  // struct tm * gmtime(const time_t *tp);
+  addToFunctionSummaryMap("gmtime",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int clock_gettime(clockid_t clock_id, struct timespec *tp);
+  addToFunctionSummaryMap("clock_gettime",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // void makecontext(ucontext_t *ucp, void (*func)(), int argc, ...);
+  addToFunctionSummaryMap("makecontext", Summary(NoEvalCall)
+                                             .ArgConstraint(NotNull(ArgNo(0)))
+                                             .ArgConstraint(NotNull(ArgNo(1))));
+
+  // void swapcontext(ucontext_t *restrict oucp, const ucontext_t *restrict
+  // ucp);
+  addToFunctionSummaryMap("swapcontext", Summary(NoEvalCall)
+                                             .ArgConstraint(NotNull(ArgNo(0)))
+                                             .ArgConstraint(NotNull(ArgNo(1))));
+
+  // void getcontext(ucontext_t *ucp);
+  addToFunctionSummaryMap("getcontext",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // void bcopy(const void *s1, void *s2, size_t n);
+  addToFunctionSummaryMap("bcopy", Summary(NoEvalCall)
+                                       .ArgConstraint(NotNull(ArgNo(0)))
+                                       .ArgConstraint(BufferSize(0, 2))
+                                       .ArgConstraint(NotNull(ArgNo(1)))
+                                       .ArgConstraint(BufferSize(1, 2))
+                                       .ArgConstraint(ArgumentCondition(
+                                           2, WithinRange, Range(0, Max))));
+
+  // int bcmp(const void *s1, const void *s2, size_t n);
+  addToFunctionSummaryMap("bcmp", Summary(NoEvalCall)
+                                      .ArgConstraint(NotNull(ArgNo(0)))
+                                      .ArgConstraint(NotNull(ArgNo(1)))
+                                      .ArgConstraint(ArgumentCondition(
+                                          2, WithinRange, Range(0, Max))));
+
+  // void bzero(void *s, size_t n);
+  addToFunctionSummaryMap("bzero", Summary(NoEvalCall)
+                                       .ArgConstraint(NotNull(ArgNo(0)))
+                                       .ArgConstraint(ArgumentCondition(
+                                           1, WithinRange, Range(0, Max))));
+
+  // int ftime(struct timeb *tp);
+  addToFunctionSummaryMap("ftime",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // wchar_t *wcswcs(const wchar_t *ws1, const wchar_t *ws2);
+  addToFunctionSummaryMap("wcswcs", Summary(NoEvalCall)
+                                        .ArgConstraint(NotNull(ArgNo(0)))
+                                        .ArgConstraint(NotNull(ArgNo(1))));
+
+  // char *stpcpy(char *desstr, const char *srcstr);
+  addToFunctionSummaryMap("stpcpy", Summary(NoEvalCall)
+                                        .ArgConstraint(NotNull(ArgNo(0)))
+                                        .ArgConstraint(NotNull(ArgNo(1))));
+
+  // char *index(const char *s, int c);    char *rindex(const char *s, int c);
+  addToFunctionSummaryMap("index",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *rindex(const char *s, int c);
+  addToFunctionSummaryMap("rindex",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_cond_signal(pthread_cond_t *cond);
+  addToFunctionSummaryMap("pthread_cond_signal",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_cond_broadcast(pthread_cond_t *cond);
+  addToFunctionSummaryMap("pthread_cond_broadcast",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void
+  // *(*start_routine)(void*), void * arg);
+  addToFunctionSummaryMap("pthread_create",
+                          Summary(NoEvalCall)
+                              .ArgConstraint(NotNull(ArgNo(0)))
+                              .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int pthread_attr_destroy(pthread_attr_t *attr);
+  addToFunctionSummaryMap("pthread_attr_destroy",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_attr_init(pthread_attr_t *attr);
+  addToFunctionSummaryMap("pthread_attr_init",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_attr_setstackaddr(pthread_attr_t *attr, void *stackaddr);
+  addToFunctionSummaryMap("pthread_attr_setstackaddr",
+                          Summary(NoEvalCall)
+                              .ArgConstraint(NotNull(ArgNo(0)))
+                              .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int pthread_attr_getstackaddr(const pthread_attr_t *attr, void
+  // **stackaddr);
+  addToFunctionSummaryMap("pthread_attr_getstackaddr",
+                          Summary(NoEvalCall)
+                              .ArgConstraint(NotNull(ArgNo(0)))
+                              .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
+  addToFunctionSummaryMap(
+      "pthread_attr_setstacksize",
+      Summary(NoEvalCall)
+          .ArgConstraint(NotNull(ArgNo(0)))
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(0, Max))));
+
+  // int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
+  addToFunctionSummaryMap(
+      "pthread_attr_setguardsize",
+      Summary(NoEvalCall)
+          .ArgConstraint(NotNull(ArgNo(0)))
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(0, Max))));
+
+  // int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t
+  // *stacksize);
+  addToFunctionSummaryMap("pthread_attr_getstacksize",
+                          Summary(NoEvalCall)
+                              .ArgConstraint(NotNull(ArgNo(0)))
+                              .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int pthread_attr_getguardsize(const pthread_attr_t *attr, size_t
+  // *guardsize);
+  addToFunctionSummaryMap("pthread_attr_getguardsize",
+                          Summary(NoEvalCall)
+                              .ArgConstraint(NotNull(ArgNo(0)))
+                              .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int pthread_mutex_init(pthread_mutex_t *restrict mutex, const
+  // pthread_mutexattr_t *restrict attr);
+  addToFunctionSummaryMap("pthread_mutex_init",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_mutex_destroy(pthread_mutex_t *mutex);
+  addToFunctionSummaryMap("pthread_mutex_destroy",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_mutex_lock(pthread_mutex_t *mutex);
+  addToFunctionSummaryMap("pthread_mutex_lock",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_mutex_trylock(pthread_mutex_t *mutex);
+  addToFunctionSummaryMap("pthread_mutex_trylock",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int pthread_mutex_unlock(pthread_mutex_t *mutex);
+  addToFunctionSummaryMap("pthread_mutex_unlock",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *crypt(const char *key, const char *salt);
+  addToFunctionSummaryMap("crypt", Summary(NoEvalCall)
+                                       .ArgConstraint(NotNull(ArgNo(0)))
+                                       .ArgConstraint(NotNull(ArgNo(1))));
+
+  // char *ttyname(int fd);
+  addToFunctionSummaryMap("ttyname", Summary(NoEvalCall)
+                                         .ArgConstraint(ArgumentCondition(
+                                             0, WithinRange, Range(0, Max))));
+
+  // char *ttyname(int fd);
+  addToFunctionSummaryMap(
+      "ttyname_r",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max)))
+          .ArgConstraint(NotNull(ArgNo(1)))
+          .ArgConstraint(BufferSize(1, 2))
+          .ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  // struct spwd *getspnam(const char *name);
+  addToFunctionSummaryMap("getspnam",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct spwd *fgetspent(FILE *fp);
+  addToFunctionSummaryMap("fgetspent",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct spwd *sgetspent(const char *s);
+  addToFunctionSummaryMap("sgetspent",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // struct passwd *fgetpwent(FILE *stream);
+  addToFunctionSummaryMap("fgetpwent",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int getgrent_r(struct group *gbuf, char *buf, size_t buflen, struct group
+  // **gbufp)
+  addToFunctionSummaryMap(
+      "getgrent_r",
+      Summary(NoEvalCall)
+          .ArgConstraint(BufferSize(1, 2))
+          .ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  // struct group *fgetgrent(FILE *stream);
+  addToFunctionSummaryMap("fgetgrent",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int getnetgrent(char **host, char **user, char **domain);
+  addToFunctionSummaryMap("getnetgrent", Summary(NoEvalCall)
+                                             .ArgConstraint(NotNull(ArgNo(0)))
+                                             .ArgConstraint(NotNull(ArgNo(1)))
+                                             .ArgConstraint(NotNull(ArgNo(2))));
+
+  // struct group *getgrnam(const char *name);
+  addToFunctionSummaryMap("getgrnam",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // char *realpath(const char *path, char *resolved_path);
+  addToFunctionSummaryMap("realpath",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // long telldir(DIR *dirp);
+  addToFunctionSummaryMap("telldir",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int scandir(const char *dirp,
+  addToFunctionSummaryMap("scandir", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(NotNull(ArgNo(1)))
+                                         .ArgConstraint(NotNull(ArgNo(3))));
+
+  // int fileno(FILE *stream);
+  addToFunctionSummaryMap("fileno",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int fseeko(FILE *stream, off_t offset, int whence);
+  addToFunctionSummaryMap("fseeko",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // off_t ftello(FILE *stream);
+  addToFunctionSummaryMap("ftello",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int execv(const char *path, char *const argv[]);
+  addToFunctionSummaryMap("execv",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int execvp(const char *file, char *const argv[]);
+  addToFunctionSummaryMap("execvp",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // size_t strnlen(const char *s, size_t maxlen);
+  addToFunctionSummaryMap("strnlen", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(ArgumentCondition(
+                                             1, WithinRange, Range(0, Max))));
+
+  // size_t wcsnlen(const wchar_t *s, size_t maxlen);
+  addToFunctionSummaryMap("wcsnlen", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(ArgumentCondition(
+                                             1, WithinRange, Range(0, Max))));
+
+  // int shmget(key_t key, size_t size, int shmflg);
+  addToFunctionSummaryMap("shmget", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            1, WithinRange, Range(0, Max))));
+
+  // int getrlimit(int resource, struct rlimit *rlim);
+  addToFunctionSummaryMap("getrlimit",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int setrlimit(int resource, const struct rlimit *rlim);
+  addToFunctionSummaryMap("setrlimit",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int glob(const char *pattern, int flags, int (*errfunc) (const char *epath,
+  // int eerrno), glob_t *pglob);
+  addToFunctionSummaryMap("glob", Summary(NoEvalCall)
+                                      .ArgConstraint(NotNull(ArgNo(0)))
+                                      .ArgConstraint(NotNull(ArgNo(3))));
+
+  // void globfree(glob_t *pglob)
+  addToFunctionSummaryMap("globfree",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // wchar_t *wcpncpy(wchar_t *dest, const wchar_t *src, size_t n);
+  addToFunctionSummaryMap("wcpncpy", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(BufferSize(0, 2))
+                                         .ArgConstraint(NotNull(ArgNo(1)))
+                                         .ArgConstraint(ArgumentCondition(
+                                             2, WithinRange, Range(0, Max))));
+
+  // char *stpncpy(char *dest, const char *src, size_t n);
+  addToFunctionSummaryMap("stpncpy", Summary(NoEvalCall)
+                                         .ArgConstraint(NotNull(ArgNo(0)))
+                                         .ArgConstraint(BufferSize(0, 2))
+                                         .ArgConstraint(NotNull(ArgNo(1)))
+                                         .ArgConstraint(ArgumentCondition(
+                                             2, WithinRange, Range(0, Max))));
+
+  // void *memccpy(void *dest, const void *src, int c, size_t n);
+  addToFunctionSummaryMap(
+      "memccpy",
+      Summary(NoEvalCall)
+          .ArgConstraint(NotNull(ArgNo(0)))
+          .ArgConstraint(NotNull(ArgNo(1)))
+          .ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max)))
+          .ArgConstraint(ArgumentCondition(3, WithinRange, Range(0, Max))));
+
+  // int getopt(int argc, char * const argv[], const char *optstring);
+  addToFunctionSummaryMap("getopt", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max)))
+                                        .ArgConstraint(NotNull(ArgNo(1)))
+                                        .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int getitimer(int which, struct itimerval *curr_value);
+  addToFunctionSummaryMap("getitimer",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int sigsuspend(const sigset_t *mask);
+  addToFunctionSummaryMap("sigsuspend",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int getrusage(int who, struct rusage *usage);
+  addToFunctionSummaryMap("getrusage",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(1))));
+
+  // int sigemptyset(sigset_t *set);
+  addToFunctionSummaryMap("sigemptyset",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int sigfillset(sigset_t *set);
+  addToFunctionSummaryMap("sigfillset",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int sigaddset(sigset_t *set, int signum);
+  addToFunctionSummaryMap("sigaddset",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int sigdelset(sigset_t *set, int signum);
+  addToFunctionSummaryMap("sigdelset",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int sigismember(const sigset_t *set, int signum);
+  addToFunctionSummaryMap("sigismember",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
+  addToFunctionSummaryMap("msgrcv", Summary(NoEvalCall)
+                                        .ArgConstraint(NotNull(ArgNo(1)))
+                                        .ArgConstraint(BufferSize(1, 2))
+                                        .ArgConstraint(ArgumentCondition(
+                                            2, WithinRange, Range(0, Max))));
+
+  // int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
+  addToFunctionSummaryMap("msgsnd", Summary(NoEvalCall)
+                                        .ArgConstraint(NotNull(ArgNo(1)))
+                                        .ArgConstraint(BufferSize(1, 2))
+                                        .ArgConstraint(ArgumentCondition(
+                                            2, WithinRange, Range(0, Max))));
+
+  // int tcflow(int fildes, int action);
+  addToFunctionSummaryMap("tcflow", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max))));
+
+  // int tcflush(int fildes, int queue_selector);
+  addToFunctionSummaryMap("tcflush", Summary(NoEvalCall)
+                                         .ArgConstraint(ArgumentCondition(
+                                             0, WithinRange, Range(0, Max))));
+
+  // int tcsendbreak(int fildes, int duration);
+  addToFunctionSummaryMap(
+      "tcsendbreak",
+      Summary(NoEvalCall)
+          .ArgConstraint(ArgumentCondition(0, WithinRange, Range(0, Max))));
+
+  // int tcgetattr(int fildes, struct termios *termios_p);
+  addToFunctionSummaryMap("tcgetattr", Summary(NoEvalCall)
+                                           .ArgConstraint(ArgumentCondition(
+                                               0, WithinRange, Range(0, Max)))
+                                           .ArgConstraint(NotNull(ArgNo(1))));
+
+  // int tcsetattr(int fildes, int optional_actions, const struct termios
+  // *termios_p);
+  addToFunctionSummaryMap("tcsetattr", Summary(NoEvalCall)
+                                           .ArgConstraint(ArgumentCondition(
+                                               0, WithinRange, Range(0, Max)))
+                                           .ArgConstraint(NotNull(ArgNo(2))));
+
+  // int cfsetospeed(struct termios *termios_p, speed_t speed);
+  addToFunctionSummaryMap("cfsetospeed",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int cfsetispeed(struct termios *termios_p, speed_t speed);
+  addToFunctionSummaryMap("cfsetispeed",
+                          Summary(NoEvalCall).ArgConstraint(NotNull(ArgNo(0))));
+
+  // int tcdrain(int fildes);
+  addToFunctionSummaryMap("tcdrain", Summary(NoEvalCall)
+                                         .ArgConstraint(ArgumentCondition(
+                                             0, WithinRange, Range(0, Max))));
+
+  // void swab(const void * src, void* dest, ssize_t bytes);
+  addToFunctionSummaryMap("swab", Summary(NoEvalCall)
+                                      .ArgConstraint(BufferSize(0, 2))
+                                      .ArgConstraint(NotNull(ArgNo(1)))
+                                      .ArgConstraint(BufferSize(1, 2))
+                                      .ArgConstraint(ArgumentCondition(
+                                          2, WithinRange, Range(0, Max))));
+
+  // int gethostname(char *name, size_t len);
+  addToFunctionSummaryMap(
+      "gethostname",
+      Summary(NoEvalCall)
+          .ArgConstraint(NotNull(ArgNo(0)))
+          .ArgConstraint(BufferSize(0, 1))
+          .ArgConstraint(ArgumentCondition(1, WithinRange, Range(1, Max))));
+
+  // int posix_memalign(void **memptr, size_t alignment, size_t size);
+  addToFunctionSummaryMap(
+      "posix_memalign",
+      Summary(NoEvalCall)
+          .ArgConstraint(NotNull(ArgNo(0)))
+          .ArgConstraint(ArgumentCondition(2, WithinRange, Range(0, Max))));
+
+  // void *valloc(size_t size);
+  addToFunctionSummaryMap("valloc", Summary(NoEvalCall)
+                                        .ArgConstraint(ArgumentCondition(
+                                            0, WithinRange, Range(0, Max))));
+
+  // END POSIX
+
   // Functions for testing.
   if (ChecksEnabled[CK_StdCLibraryFunctionsTesterChecker]) {
     addToFunctionSummaryMap(
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to