/* PR rtl-optimization/45912 */ extern void abort (void); static void* __attribute__((noinline,noclone)) get_addr_base_and_unit_offset (void *base, long long *i) { *i = 0; return base; } static void* __attribute__((noinline,noclone)) build_int_cst (void *base, long long offset) { if (offset != 4) abort (); return base; } static void* __attribute__((noinline,noclone)) build_ref_for_offset (void *base, long long offset) { long long base_offset; base = get_addr_base_and_unit_offset (base, &base_offset); return build_int_cst (base, base_offset + offset / 8); } int main (void) { void *ret = build_ref_for_offset ((void *)0, 32); if (ret != (void *)0) abort (); return 0; }