diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2023-07-05 15:34:56 +0200 |
---|---|---|
committer | Thomas Schwinge <thomas@codesourcery.com> | 2023-07-06 11:59:08 +0200 |
commit | 79a90e69ec9faf53ba84391f3c558e552711f6a6 (patch) | |
tree | d0662f33852196ddadc222f81bca31952003cf26 | |
parent | a53bbd8cd2ec6f08d756faf9f9d7e345704bb880 (diff) | |
download | gcc-79a90e69ec9faf53ba84391f3c558e552711f6a6.zip gcc-79a90e69ec9faf53ba84391f3c558e552711f6a6.tar.gz gcc-79a90e69ec9faf53ba84391f3c558e552711f6a6.tar.bz2 |
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'.
-rw-r--r-- | gcc/ggc-common.cc | 18 | ||||
-rw-r--r-- | gcc/stringpool.cc | 1 |
2 files changed, 15 insertions, 4 deletions
diff --git a/gcc/ggc-common.cc b/gcc/ggc-common.cc index 173ab64..bed7a9d 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 46aff39..8658e6a 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. */ |