Skip to content
Snippets Groups Projects
Commit dfb40855 authored by Jakub Jelinek's avatar Jakub Jelinek
Browse files

dwarf2out: Stop using wide_int in GC structures

The planned wide_int/widest_int changes to support larger precisions
make wide_int and widest_int unusable in GC structures, because it
has non-trivial destructors (and may point to heap allocated memory).
dwarf2out.{h,cc} is the only user of wide_int in GC structures for val_wide,
but actually doesn't really need much, all those are at one point created
from const wide_int_ref & and never changed afterwards, with just a couple
of methods used on it.

So, this patch replaces use of wide_int there with a new class, dw_wide_int,
which contains just precision, len field and the limbs in trailing array.
Most needed methods are implemented directly, just for the most complicated
cases it temporarily constructs a wide_int_ref from it and calls its methods.

2023-10-12  Jakub Jelinek  <jakub@redhat.com>

	* dwarf2out.h (wide_int_ptr): Remove.
	(dw_wide_int_ptr): New typedef.
	(struct dw_val_node): Change type of val_wide from wide_int_ptr
	to dw_wide_int_ptr.
	(struct dw_wide_int): New type.
	(dw_wide_int::elt): New method.
	(dw_wide_int::operator ==): Likewise.
	* dwarf2out.cc (get_full_len): Change argument type to
	const dw_wide_int & from const wide_int &.  Use CEIL.  Call
	get_precision method instead of calling wi::get_precision.
	(alloc_dw_wide_int): New function.
	(add_AT_wide): Change w argument type to const wide_int_ref &
	from const wide_int &.  Use alloc_dw_wide_int.
	(mem_loc_descriptor, loc_descriptor): Use alloc_dw_wide_int.
	(insert_wide_int): Change val argument type to const wide_int_ref &
	from const wide_int &.
	(add_const_value_attribute): Pass rtx_mode_t temporary directly to
	add_AT_wide instead of using a temporary variable.
parent 05f98310
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment