[PATCH] D79433: [analyzer] StdLibraryFunctionsChecker: Add summaries for POSIX

Gabor Marton via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu May 14 07:32:36 PDT 2020


martong planned changes to this revision.
martong added a comment.

With @xazax.hun we agreed that we should try our best to provide signatures for all functions. This includes two major changes:

1. Add signatures to each summary here, possibly with `Irrelevant` types.
2. Add the ability to lookup types. This will result that we can change the majority `Irrelevant` types to concrete types.

Note, we still cannot get rid of `Irrelevant` types because of platform dependent typedefs and macros. E.g. `ssize_t` or `__CONST_SOCKADDR_ARG`. Check out glibc 2.27 implementation for `struct sockaddr *` below. The only solution for such cases is to use an `Irrelevant` type.

  #if defined __cplusplus || !__GNUC_PREREQ (2, 7) || !defined __USE_GNU
  # define __SOCKADDR_ARG		struct sockaddr *__restrict
  # define __CONST_SOCKADDR_ARG	const struct sockaddr *
  #else
  /* Add more `struct sockaddr_AF' types here as necessary.
     These are all the ones I found on NetBSD and Linux.  */
  # define __SOCKADDR_ALLTYPES \
    __SOCKADDR_ONETYPE (sockaddr) \
    __SOCKADDR_ONETYPE (sockaddr_at) \
    __SOCKADDR_ONETYPE (sockaddr_ax25) \
    __SOCKADDR_ONETYPE (sockaddr_dl) \
    __SOCKADDR_ONETYPE (sockaddr_eon) \
    __SOCKADDR_ONETYPE (sockaddr_in) \
    __SOCKADDR_ONETYPE (sockaddr_in6) \
    __SOCKADDR_ONETYPE (sockaddr_inarp) \
    __SOCKADDR_ONETYPE (sockaddr_ipx) \
    __SOCKADDR_ONETYPE (sockaddr_iso) \
    __SOCKADDR_ONETYPE (sockaddr_ns) \
    __SOCKADDR_ONETYPE (sockaddr_un) \
    __SOCKADDR_ONETYPE (sockaddr_x25)
  
  # define __SOCKADDR_ONETYPE(type) struct type *__restrict __##type##__;
  typedef union { __SOCKADDR_ALLTYPES
  	      } __SOCKADDR_ARG __attribute__ ((__transparent_union__));
  # undef __SOCKADDR_ONETYPE
  # define __SOCKADDR_ONETYPE(type) const struct type *__restrict __##type##__;
  typedef union { __SOCKADDR_ALLTYPES
  	      } __CONST_SOCKADDR_ARG __attribute__ ((__transparent_union__));
  # undef __SOCKADDR_ONETYPE
  #endif


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D79433





More information about the cfe-commits mailing list