Hi! OK to push the attached "GGC, GTY: Tighten up a few things re 'reorder' option and strings"?
Grüße Thomas ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
>From 8751deeb7afdc8ece6a0645c8404f615144b1bd4 Mon Sep 17 00:00:00 2001 From: Thomas Schwinge <tho...@codesourcery.com> Date: Wed, 5 Jul 2023 15:34:56 +0200 Subject: [PATCH] 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'. --- gcc/ggc-common.cc | 18 ++++++++++++++---- gcc/stringpool.cc | 1 + 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/gcc/ggc-common.cc b/gcc/ggc-common.cc index 173ab64cb73..bed7a9d4d02 100644 --- a/gcc/ggc-common.cc +++ b/gcc/ggc-common.cc @@ -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)) diff --git a/gcc/stringpool.cc b/gcc/stringpool.cc index 46aff39d7d5..8658e6ab52a 100644 --- a/gcc/stringpool.cc +++ b/gcc/stringpool.cc @@ -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. */ -- 2.34.1