modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/pr33669.c (about)

     1  extern void abort (void);
     2  
     3  typedef struct foo_t
     4  { 
     5    unsigned int blksz;
     6    unsigned int bf_cnt; 
     7  } foo_t;
     8  
     9  #define _RNDUP(x, unit)  ((((x) + (unit) - 1) / (unit)) * (unit))
    10  #define _RNDDOWN(x, unit)  ((x) - ((x)%(unit)))
    11  
    12  long long
    13  foo (foo_t *const pxp,  long long offset, unsigned int extent)
    14  {
    15    long long blkoffset = _RNDDOWN(offset, (long long )pxp->blksz);
    16    unsigned int diff = (unsigned int)(offset - blkoffset);
    17    unsigned int blkextent = _RNDUP(diff + extent, pxp->blksz);
    18  
    19    if (pxp->blksz < blkextent)
    20      return -1LL;
    21  
    22    if (pxp->bf_cnt > pxp->blksz)
    23      pxp->bf_cnt = pxp->blksz;
    24  
    25    return blkoffset;
    26  }
    27  
    28  int
    29  main ()
    30  {
    31    foo_t x;
    32    long long xx;
    33  
    34    x.blksz = 8192;
    35    x.bf_cnt = 0;
    36    xx = foo (&x, 0, 4096);
    37    if (xx != 0LL)
    38      abort ();
    39    return 0;
    40  }