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 }