/* { 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;
}
