modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/20040708-1.c (about)

     1  /* PR rtl-optimization/16199 */
     2  /* Origin: Olaf Klein <oklein@smallo.ruhr.de> */
     3  
     4  typedef enum {
     5      APR_LOCK_FCNTL,
     6      APR_LOCK_FLOCK,
     7      APR_LOCK_SYSVSEM,
     8      APR_LOCK_PROC_PTHREAD,
     9      APR_LOCK_POSIXSEM,
    10      APR_LOCK_DEFAULT
    11  } apr_lockmech_e;
    12  
    13  struct apr_proc_mutex_unix_lock_methods_t {
    14      unsigned int flags;
    15      const char *name;
    16  };
    17  
    18  typedef struct apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_lock_methods_t;
    19  
    20  extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_sysv_methods;
    21  
    22  struct apr_proc_mutex_t {
    23      const apr_proc_mutex_unix_lock_methods_t *inter_meth;
    24      int curr_locked;
    25      char *fname;
    26  };
    27  
    28  typedef struct apr_proc_mutex_t apr_proc_mutex_t;
    29  
    30  extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_proc_pthread_methods;
    31  
    32  extern const apr_proc_mutex_unix_lock_methods_t apr_proc_mutex_unix_fcntl_methods;
    33  
    34  static int proc_mutex_choose_method(apr_proc_mutex_t *new_mutex, apr_lockmech_e mech)
    35  {
    36      switch (mech) {
    37      case APR_LOCK_FCNTL:
    38          new_mutex->inter_meth = &apr_proc_mutex_unix_fcntl_methods;
    39          break;
    40      case APR_LOCK_FLOCK:
    41          return ((20000 + 50000) + 23);
    42          break;
    43      case APR_LOCK_SYSVSEM:
    44          new_mutex->inter_meth = &apr_proc_mutex_unix_sysv_methods;
    45          break;
    46      case APR_LOCK_POSIXSEM:
    47          return ((20000 + 50000) + 23);
    48          break;
    49      case APR_LOCK_PROC_PTHREAD:
    50          new_mutex->inter_meth = &apr_proc_mutex_unix_proc_pthread_methods;
    51          break;
    52      case APR_LOCK_DEFAULT:
    53          new_mutex->inter_meth = &apr_proc_mutex_unix_proc_pthread_methods;
    54          break;
    55      default:
    56          return ((20000 + 50000) + 23);
    57      }
    58      return 0;
    59  }
    60  
    61  const char* apr_proc_mutex_defname(void)
    62  {
    63      apr_proc_mutex_t mutex;
    64  
    65      if (proc_mutex_choose_method(&mutex, APR_LOCK_DEFAULT) != 0) {
    66          return "unknown";
    67      }
    68  }