data = (struct ptr_data *)
saving_htab->find_with_hash (obj, POINTER_HASH (obj));
gcc_assert (data && data->note_ptr_cookie == note_ptr_cookie);
+ /* The GTY 'reorder' option doesn't make sense if we don't walk pointers,
+ such as for strings. */
+ gcc_checking_assert (data->note_ptr_fn != gt_pch_p_S);
data->reorder_fn = reorder_fn;
}
state.ptrs[i]->reorder_fn (state.ptrs[i]->obj,
state.ptrs[i]->note_ptr_cookie,
relocate_ptrs, &state);
- state.ptrs[i]->note_ptr_fn (state.ptrs[i]->obj,
- state.ptrs[i]->note_ptr_cookie,
- relocate_ptrs, &state);
+ gt_note_pointers note_ptr_fn = state.ptrs[i]->note_ptr_fn;
+ gcc_checking_assert (note_ptr_fn != NULL);
+ /* 'gt_pch_p_S' enables certain special handling, but otherwise
+ corresponds to no 'note_ptr_fn'. */
+ if (note_ptr_fn == gt_pch_p_S)
+ note_ptr_fn = NULL;
+ if (note_ptr_fn != NULL)
+ note_ptr_fn (state.ptrs[i]->obj, state.ptrs[i]->note_ptr_cookie,
+ relocate_ptrs, &state);
ggc_pch_write_object (state.d, state.f, state.ptrs[i]->obj,
state.ptrs[i]->new_addr, state.ptrs[i]->size);
- if (state.ptrs[i]->note_ptr_fn != gt_pch_p_S)
+ if (state.ptrs[i]->reorder_fn != NULL
+ || note_ptr_fn != NULL)
memcpy (state.ptrs[i]->obj, this_object, state.ptrs[i]->size);
#if defined ENABLE_VALGRIND_ANNOTATIONS && defined VALGRIND_GET_VBITS
if (UNLIKELY (get_vbits == 1))