diff --git a/api/gc-ephemeron.h b/api/gc-ephemeron.h index d5159dff3..1d9e59b55 100644 --- a/api/gc-ephemeron.h +++ b/api/gc-ephemeron.h @@ -18,7 +18,7 @@ struct gc_mutator; struct gc_ephemeron; GC_API_ size_t gc_ephemeron_size(void); -GC_API_ struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut); +GC_API_ struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut); GC_API_ void gc_ephemeron_init(struct gc_mutator *mut, struct gc_ephemeron *ephemeron, struct gc_ref key, struct gc_ref value); diff --git a/benchmarks/ephemerons.c b/benchmarks/ephemerons.c index c11fa755c..698aa1708 100644 --- a/benchmarks/ephemerons.c +++ b/benchmarks/ephemerons.c @@ -25,9 +25,9 @@ static Box* allocate_box(struct gc_mutator *mut) { } static struct gc_ephemeron* allocate_ephemeron(struct gc_mutator *mut) { - struct gc_ref ret = gc_allocate_ephemeron(mut); - *tag_word(ret) = tag_live(ALLOC_KIND_EPHEMERON); - return gc_ref_heap_object(ret); + struct gc_ephemeron *ret = gc_allocate_ephemeron(mut); + *tag_word(gc_ref_from_heap_object(ret)) = tag_live(ALLOC_KIND_EPHEMERON); + return ret; } /* Get the current time in microseconds */ diff --git a/src/bdw.c b/src/bdw.c index 3b01e9dcb..aaa89e684 100644 --- a/src/bdw.c +++ b/src/bdw.c @@ -131,9 +131,8 @@ void gc_write_barrier_extern(struct gc_ref obj, size_t obj_size, static int ephemeron_gc_kind; -struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut) { - void *ret = GC_generic_malloc(gc_ephemeron_size(), ephemeron_gc_kind); - return gc_ref_from_heap_object(ret); +struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut) { + return GC_generic_malloc(gc_ephemeron_size(), ephemeron_gc_kind); } unsigned gc_heap_ephemeron_trace_epoch(struct gc_heap *heap) { diff --git a/src/semi.c b/src/semi.c index 182a68a3d..fe181eb94 100644 --- a/src/semi.c +++ b/src/semi.c @@ -445,8 +445,8 @@ void* gc_allocate_pointerless(struct gc_mutator *mut, size_t size) { return gc_allocate(mut, size); } -struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut) { - return gc_ref_from_heap_object(gc_allocate(mut, gc_ephemeron_size())); +struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut) { + return gc_allocate(mut, gc_ephemeron_size()); } void gc_ephemeron_init(struct gc_mutator *mut, struct gc_ephemeron *ephemeron, diff --git a/src/whippet.c b/src/whippet.c index d32868aa7..6f4596678 100644 --- a/src/whippet.c +++ b/src/whippet.c @@ -2200,14 +2200,14 @@ void* gc_allocate_pointerless(struct gc_mutator *mut, size_t size) { return gc_allocate(mut, size); } -struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut) { +struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut) { struct gc_ref ret = gc_ref_from_heap_object(gc_allocate(mut, gc_ephemeron_size())); if (gc_has_conservative_intraheap_edges()) { uint8_t *metadata = metadata_byte_for_addr(gc_ref_value(ret)); *metadata |= METADATA_BYTE_EPHEMERON; } - return ret; + return gc_ref_heap_object(ret); } void gc_ephemeron_init(struct gc_mutator *mut, struct gc_ephemeron *ephemeron,