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

     1  typedef struct {
     2      unsigned long pmd0;
     3      unsigned long pmd1;
     4  } pmd_t;
     5  typedef unsigned int pgd_t;
     6  struct mm_struct {
     7      pgd_t * pgd;
     8  };
     9  extern inline int pmd_bad(pmd_t pmd)
    10  {
    11  }
    12  extern inline void pmd_clear(pmd_t * pmdp)
    13  {
    14    ((*pmdp).pmd0) = 0x20 | 0x00;
    15    ((*pmdp).pmd1) = 0x20 | 0x00;
    16  }
    17  static inline void free_one_pmd(pmd_t * dir)
    18  {
    19    if (pmd_bad(*dir)) {
    20        pmd_clear(dir);
    21    }
    22  }
    23  static inline void free_one_pgd(pgd_t * dir)
    24  {
    25    int j;
    26    pmd_t * pmd;
    27    pmd = ((pmd_t *) ((unsigned long) (void *)(__pgd_val(dir) & (~((1UL << 12)-1)))) + (((0) >> 21) & (512 - 1)));
    28    for (j = 0; j < 512 ; j++) {
    29        free_one_pmd(pmd+j);
    30    }
    31  }
    32  void clear_page_tables(struct mm_struct *mm, unsigned long first, int nr)
    33  {
    34    pgd_t * page_dir = mm->pgd;
    35    do {
    36        free_one_pgd(page_dir);
    37    } while (--nr);
    38  }