1  #include "analyzer-decls.h"
       2  
       3  /* According to PR 107807 comment #2, OS X implements "errno"
       4     like this:  */
       5  
       6  extern int * __error(void);
       7  #define errno (*__error())
       8  
       9  extern void external_fn (void);
      10  
      11  int test_reading_errno (void)
      12  {
      13    return errno;
      14  }
      15  
      16  void test_setting_errno (int val)
      17  {
      18    errno = val;
      19  }
      20  
      21  void test_storing_to_errno (int val)
      22  {
      23    __analyzer_eval (errno == val); /* { dg-warning "UNKNOWN" } */
      24    errno = val;
      25    __analyzer_eval (errno == val); /* { dg-warning "TRUE" } */
      26    external_fn ();
      27    __analyzer_eval (errno == val); /* { dg-warning "UNKNOWN" } */
      28  }