opt-5.c

来自「用于进行gcc测试」· C语言 代码 · 共 111 行

C
111
字号
/* { dg-do compile } *//* { dg-options "-O2" } *//* { dg-require-effective-target tls } *//* Sched1 moved {load_tp} pattern between strlen call and the copy   of the hard return value to its pseudo.  This resulted in a   reload abort, since the hard register was not spillable.  */extern __thread int __libc_errno __attribute__ ((tls_model ("initial-exec")));struct stat64  {    long dummy[4];  };typedef __SIZE_TYPE__ size_t;typedef unsigned long long uint64_t;typedef int __mode_t;extern size_t strlen (__const char *__s) __attribute__ ((__pure__));extern int strcmp (__const char *__s1, __const char *__s2)     __attribute__ ((__pure__));extern int __open64 (__const char *__file, int __oflag, ...);extern int __open (__const char *__file, int __oflag, ...);extern int __mkdir (__const char *__path, __mode_t __mode);extern int __lxstat64 (int __ver, __const char *__filename,                       struct stat64 *__stat_buf) ;static const char letters[] ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";int__gen_tempname (char *tmpl, int kind){  int len;  char *XXXXXX;  static uint64_t value;  uint64_t random_time_bits;  unsigned long count;  int fd = -1;  int save_errno = __libc_errno;  struct stat64 st;  unsigned long attempts_min = 62L * 62L * 62L;  unsigned long attempts = attempts_min < 238328 ? 238328 : attempts_min;  len = strlen (tmpl);  if (len < 6 || strcmp(&tmpl[len - 6], "XXXXXX"))    {      (__libc_errno = (22));      return -1;    }  XXXXXX = &tmpl[len - 6];  for (count = 0; count < attempts; value += 7777, ++count)    {      uint64_t v = value;      XXXXXX[0] = letters[v % 62];      v /= 62;      XXXXXX[1] = letters[v % 62];      v /= 62;      XXXXXX[2] = letters[v % 62];      v /= 62;      XXXXXX[3] = letters[v % 62];      v /= 62;      XXXXXX[4] = letters[v % 62];      v /= 62;      XXXXXX[5] = letters[v % 62];      switch (kind)        {        case 0:          fd = __open (tmpl, 02 | 01000 | 04000, 0400 | 0200);          break;        case 1:          fd = __open64 (tmpl, 02 | 01000 | 04000, 0400 | 0200);          break;        case 2:          fd = __mkdir (tmpl, 0400 | 0200 | 0100);          break;        case 3:          if (__lxstat64 (2, tmpl, &st) < 0)            {              if (__libc_errno == 2)                {                  (__libc_errno = (save_errno));                  return 0;                }              else                return -1;            }          continue;        }      if (fd >= 0)        {          (__libc_errno = (save_errno));          return fd;        }      else if (__libc_errno != 17)        return -1;    }  (__libc_errno = (17));  return -1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?