GGC, GTY: Tighten up a few things re 'reorder' option and strings

..., which doesn't make sense in combination.

This, again, is primarily preparational for another change.

	gcc/
	* ggc-common.cc (gt_pch_note_reorder, gt_pch_save): Tighten up a
	few things re 'reorder' option and strings.
	* stringpool.cc (gt_pch_p_S): This is now 'gcc_unreachable'.
This commit is contained in:
Thomas Schwinge 2023-07-05 15:34:56 +02:00
parent a53bbd8cd2
commit 79a90e69ec
2 changed files with 15 additions and 4 deletions

View file

@ -314,6 +314,9 @@ gt_pch_note_reorder (void *obj, void *note_ptr_cookie,
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;
}
@ -636,12 +639,19 @@ gt_pch_save (FILE *f)
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))

View file

@ -185,6 +185,7 @@ gt_pch_p_S (void *obj ATTRIBUTE_UNUSED, void *x ATTRIBUTE_UNUSED,
gt_pointer_operator op ATTRIBUTE_UNUSED,
void *cookie ATTRIBUTE_UNUSED)
{
gcc_unreachable ();
}
/* PCH pointer-walking routine for strings. */