/* { dg-do compile } */ /* { dg-options "-O2 -mtune=xscale" } */ typedef unsigned int size_t; typedef short unsigned int __uint16_t; typedef long unsigned int __uint32_t; typedef unsigned int __uintptr_t; typedef __uint16_t uint16_t ; typedef __uint32_t uint32_t ; typedef __uintptr_t uintptr_t; typedef uint32_t Objects_Id; typedef uint16_t Objects_Maximum; typedef struct { } Objects_Control; static __inline__ void *_Addresses_Align_up (void *address, size_t alignment) { uintptr_t mask = alignment - (uintptr_t)1; return (void*)(((uintptr_t)address + mask) & ~mask); } typedef struct { Objects_Id minimum_id; Objects_Maximum maximum; _Bool auto_extend; Objects_Maximum allocation_size; void **object_blocks; } Objects_Information; extern uint32_t _Objects_Get_index (Objects_Id); extern void** _Workspace_Allocate (size_t); void _Objects_Extend_information (Objects_Information *information) { uint32_t block_count; uint32_t minimum_index; uint32_t maximum; size_t block_size; _Bool do_extend = minimum_index = _Objects_Get_index( information->minimum_id ); if ( information->object_blocks == ((void *)0) ) block_count = 0; else { block_count = information->maximum / information->allocation_size; } if ( do_extend ) { void **object_blocks; uintptr_t object_blocks_size; uintptr_t inactive_per_block_size; object_blocks_size = (uintptr_t)_Addresses_Align_up( (void*)(block_count * sizeof(void*)), 8 ); inactive_per_block_size = (uintptr_t)_Addresses_Align_up( (void*)(block_count * sizeof(uint32_t)), 8 ); block_size = object_blocks_size + inactive_per_block_size + ((maximum + minimum_index) * sizeof(Objects_Control *)); if ( information->auto_extend ) { object_blocks = _Workspace_Allocate( block_size ); } else { } } }