1 /* Symbolic offsets and ranges.
2 Copyright (C) 2023-2025 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
12 GCC is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
21 #ifndef GCC_ANALYZER_RANGES_H
22 #define GCC_ANALYZER_RANGES_H
26 /* Wrapper around an svalue for a value measured in bytes. */
28 class symbolic_byte_offset
31 explicit symbolic_byte_offset (int i
, region_model_manager
&mgr
);
32 symbolic_byte_offset (const svalue
*num_bytes_sval
);
33 explicit symbolic_byte_offset (region_offset offset
,
34 region_model_manager
&mgr
);
36 const svalue
*get_svalue () const { return m_num_bytes_sval
; }
37 tree
maybe_get_constant () const;
39 void dump_to_pp (pretty_printer
*pp
, bool) const;
40 void dump (bool) const;
42 std::unique_ptr
<json::value
> to_json () const;
44 bool operator== (const symbolic_byte_offset
&other
) const
46 return m_num_bytes_sval
== other
.m_num_bytes_sval
;
50 const svalue
*m_num_bytes_sval
;
53 /* A range of byte offsets, where both the start and size of the
54 range can be symbolic. */
56 class symbolic_byte_range
59 symbolic_byte_range (symbolic_byte_offset start
,
60 symbolic_byte_offset size
)
66 symbolic_byte_range (region_offset start
,
67 const svalue
*num_bytes
,
68 region_model_manager
&mgr
);
70 void dump_to_pp (pretty_printer
*pp
,
72 region_model_manager
&mgr
) const;
73 void dump (bool, region_model_manager
&mgr
) const;
75 std::unique_ptr
<json::value
> to_json () const;
77 bool empty_p () const;
79 symbolic_byte_offset
get_start_byte_offset () const
83 symbolic_byte_offset
get_last_byte_offset (region_model_manager
&mgr
) const;
84 symbolic_byte_offset
get_size_in_bytes () const
88 symbolic_byte_offset
get_next_byte_offset (region_model_manager
&mgr
) const;
90 tristate
intersection (const symbolic_byte_range
&other
,
91 const region_model
&model
) const;
94 symbolic_byte_offset m_start
;
95 symbolic_byte_offset m_size
;
100 #endif /* GCC_ANALYZER_RANGES_H */