Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/gcc.dg/pr18241-2.c @ 131:84e7813d76e9
gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 07:37:49 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* { dg-do run } */ /* { dg-options "-std=gnu99 -Wall -Wextra -O1" } */ extern void *memset (void*, int, __SIZE_TYPE__); extern void abort (void); struct radix_tree_root { unsigned int height; struct radix_tree_node *rnode; }; struct radix_tree_node { unsigned int count; void *slots[64]; unsigned long tags[2]; }; struct radix_tree_path { struct radix_tree_node *node, **slot; int offset; }; void radix_tree_tag_clear(struct radix_tree_root *root, unsigned long index) { struct radix_tree_path path[7], *pathp = path; unsigned int height, shift; volatile unsigned long *addr; height = root->height; shift = (height - 1) * 6; path[0].slot = &root->rnode; while (height > 0) { int offset; offset = (index >> shift) & (64-1); pathp[1].offset = offset; pathp[1].node = *pathp[0].slot; pathp[1].slot = (struct radix_tree_node **) (pathp[1].node->slots + offset); pathp++; shift -= 6; height--; } addr = &(pathp->node->tags[0]) + 1; *addr = 574; } struct radix_tree_root r; struct radix_tree_node node; int main () { r.height = 1; r.rnode = &node; memset (&node, 0, sizeof (node)); node.count = 1; radix_tree_tag_clear (&r, 13); return 0; }