aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2023-07-05 15:34:56 +0200
committerThomas Schwinge <thomas@codesourcery.com>2023-07-06 11:59:08 +0200
commit79a90e69ec9faf53ba84391f3c558e552711f6a6 (patch)
treed0662f33852196ddadc222f81bca31952003cf26
parenta53bbd8cd2ec6f08d756faf9f9d7e345704bb880 (diff)
downloadgcc-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.cc18
-rw-r--r--gcc/stringpool.cc1
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. */