Skip to content
This repository has been archived by the owner on Sep 2, 2023. It is now read-only.

Commit

Permalink
Use scoped_value_mark in two more places
Browse files Browse the repository at this point in the history
I found a couple of spots that could use scoped_value_mark.  One of
them is a spot that didn't consider the possibility that value_mark
can return NULL.  I tend to doubt this can be seen in this context,
but nevertheless this is safer.

Regression tested on x86-64 Fedora 36.
  • Loading branch information
tromey committed Jun 9, 2023
1 parent 30711c8 commit 8945920
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 13 deletions.
15 changes: 7 additions & 8 deletions gdb/f-lang.c
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,8 @@ class fortran_array_repacker_base_impl
{
if (inner_p)
{
gdb_assert (m_mark == nullptr);
m_mark = value_mark ();
gdb_assert (!m_mark.has_value ());
m_mark.emplace ();
}
}

Expand All @@ -282,9 +282,8 @@ class fortran_array_repacker_base_impl
{
if (inner_p)
{
gdb_assert (m_mark != nullptr);
value_free_to_mark (m_mark);
m_mark = nullptr;
gdb_assert (m_mark.has_value ());
m_mark.reset ();
}
}

Expand All @@ -305,9 +304,9 @@ class fortran_array_repacker_base_impl
written. */
LONGEST m_dest_offset;

/* Set with a call to VALUE_MARK, and then reset after calling
VALUE_FREE_TO_MARK. */
struct value *m_mark = nullptr;
/* Set and reset to handle removing intermediate values from the
value chain. */
gdb::optional<scoped_value_mark> m_mark;
};

/* A class used by FORTRAN_VALUE_SUBARRAY when repacking Fortran array
Expand Down
8 changes: 3 additions & 5 deletions gdb/value.c
Original file line number Diff line number Diff line change
Expand Up @@ -3879,7 +3879,9 @@ value::fetch_lazy_register ()
frame_info_ptr next_frame;
int regnum;
struct type *type = check_typedef (this->type ());
struct value *new_val = this, *mark = value_mark ();
struct value *new_val = this;

scoped_value_mark mark;

/* Offsets are not supported here; lazy register values must
refer to the entire register. */
Expand Down Expand Up @@ -3983,10 +3985,6 @@ value::fetch_lazy_register ()

frame_debug_printf ("%s", debug_file.c_str ());
}

/* Dispose of the intermediate values. This prevents
watchpoints from trying to watch the saved frame pointer. */
value_free_to_mark (mark);
}

/* See value.h. */
Expand Down

0 comments on commit 8945920

Please sign in to comment.