GCC Middle and Back End API Reference
call-details.h
Go to the documentation of this file.
1/* Helper class for handling a call with specific arguments.
2 Copyright (C) 2019-2026 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
4
5This file is part of GCC.
6
7GCC is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 3, or (at your option)
10any later version.
11
12GCC is distributed in the hope that it will be useful, but
13WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with GCC; see the file COPYING3. If not see
19<http://www.gnu.org/licenses/>. */
20
21#ifndef GCC_ANALYZER_CALL_DETAILS_H
22#define GCC_ANALYZER_CALL_DETAILS_H
23
24#include "pending-diagnostic.h"
25
26namespace ana {
27
28/* Helper class for handling calls to functions with known behavior. */
29
31{
32public:
33 call_details (const gcall &call, region_model *model,
36
37 region_model *get_model () const { return m_model; }
39 region_model_context *get_ctxt () const { return m_ctxt; }
40 logger *get_logger () const;
41
43 tree get_lhs_type () const { return m_lhs_type; }
44 const region *get_lhs_region () const { return m_lhs_region; }
45
46 bool maybe_set_lhs (const svalue *result) const;
48
49 unsigned num_args () const;
50 bool arg_is_pointer_p (unsigned idx) const
51 {
52 return POINTER_TYPE_P (get_arg_type (idx));
53 }
54 bool arg_is_size_p (unsigned idx) const;
55 bool arg_is_integral_p (unsigned idx) const
56 {
57 return INTEGRAL_TYPE_P (get_arg_type (idx));
58 }
59
60 const gcall &get_call_stmt () const { return m_call; }
61 location_t get_location () const;
62
63 tree get_arg_tree (unsigned idx) const;
64 tree get_arg_type (unsigned idx) const;
65 const svalue *get_arg_svalue (unsigned idx) const;
66 const region *deref_ptr_arg (unsigned idx) const;
67 const char *get_arg_string_literal (unsigned idx) const;
68
70
71 void dump_to_pp (pretty_printer *pp, bool simple) const;
72 void dump (bool simple) const;
73 void dump () const;
74
75 std::unique_ptr<text_art::tree_widget>
77
79
80 tree lookup_function_attribute (const char *attr_name) const;
81
82 void
83 check_for_null_terminated_string_arg (unsigned arg_idx) const;
84 const svalue *
86 bool include_terminator,
87 const svalue **out_sval) const;
88
89 void
90 complain_about_overlap (unsigned arg_idx_a,
91 unsigned arg_idx_b,
92 const svalue *num_bytes_read_sval) const;
93
94private:
95 const gcall &m_call;
100};
101
102/* A bundle of information about a problematic argument at a callsite
103 for use by pending_diagnostic subclasses for reporting and
104 for deduplication. */
105
107{
108public:
109 call_arg_details (const call_details &cd, unsigned arg_idx)
110 : m_call (cd.get_call_stmt ()),
111 m_called_fndecl (cd.get_fndecl_for_call ()),
112 m_arg_idx (arg_idx),
113 m_arg_expr (cd.get_arg_tree (arg_idx))
114 {
115 }
116
117 bool operator== (const call_arg_details &other) const
118 {
119 return (&m_call == &other.m_call
120 && m_called_fndecl == other.m_called_fndecl
121 && m_arg_idx == other.m_arg_idx
122 && pending_diagnostic::same_tree_p (m_arg_expr, other.m_arg_expr));
123 }
124
125 const gcall &m_call;
127 unsigned m_arg_idx; // 0-based
129};
130
131} // namespace ana
132
133#endif /* GCC_ANALYZER_CALL_DETAILS_H */
Definition call-details.h:31
uncertainty_t * get_uncertainty() const
void check_for_null_terminated_string_arg(unsigned arg_idx) const
region_model_manager * get_manager() const
const svalue * get_arg_svalue(unsigned idx) const
const svalue * check_for_null_terminated_string_arg(unsigned arg_idx, bool include_terminator, const svalue **out_sval) const
tree get_arg_tree(unsigned idx) const
bool arg_is_pointer_p(unsigned idx) const
Definition call-details.h:50
location_t get_location() const
void dump_to_pp(pretty_printer *pp, bool simple) const
const svalue * get_or_create_conjured_svalue(const region *) const
void complain_about_overlap(unsigned arg_idx_a, unsigned arg_idx_b, const svalue *num_bytes_read_sval) const
tree get_lhs_type() const
Definition call-details.h:43
region_model_context * get_ctxt() const
Definition call-details.h:39
region_model_context * m_ctxt
Definition call-details.h:97
bool arg_is_integral_p(unsigned idx) const
Definition call-details.h:55
const region * get_lhs_region() const
Definition call-details.h:44
call_details(const call_details &cd, region_model_context *ctxt)
const region * m_lhs_region
Definition call-details.h:99
tree get_fndecl_for_call() const
unsigned num_args() const
tree lookup_function_attribute(const char *attr_name) const
const gcall & get_call_stmt() const
Definition call-details.h:60
void dump(bool simple) const
const gcall & m_call
Definition call-details.h:95
bool maybe_set_lhs(const svalue *result) const
tree get_arg_type(unsigned idx) const
tree m_lhs_type
Definition call-details.h:98
call_details(const gcall &call, region_model *model, region_model_context *ctxt)
const region * deref_ptr_arg(unsigned idx) const
region_model * m_model
Definition call-details.h:96
void set_any_lhs_with_defaults() const
void dump() const
const char * get_arg_string_literal(unsigned idx) const
region_model * get_model() const
Definition call-details.h:37
logger * get_logger() const
std::unique_ptr< text_art::tree_widget > make_dump_widget(const text_art::dump_widget_info &dwi) const
bool arg_is_size_p(unsigned idx) const
Definition analyzer-logging.h:34
static bool same_tree_p(tree t1, tree t2)
Definition region-model.h:768
Definition region-model-manager.h:32
Definition region-model.h:299
Definition region.h:126
Definition svalue.h:92
Definition store.h:161
Definition pretty-print.h:241
union tree_node * tree
Definition coretypes.h:97
Definition access-diagram.h:30
unsigned m_arg_idx
Definition call-details.h:127
tree m_called_fndecl
Definition call-details.h:126
call_arg_details(const call_details &cd, unsigned arg_idx)
Definition call-details.h:109
tree m_arg_expr
Definition call-details.h:128
bool operator==(const call_arg_details &other) const
Definition call-details.h:117
const gcall & m_call
Definition call-details.h:125
Definition gimple.h:352
Definition dump-widget-info.h:31
static control_dependences * cd
Definition tree-ssa-dce.cc:104
#define POINTER_TYPE_P(TYPE)
Definition tree.h:701
#define INTEGRAL_TYPE_P(TYPE)
Definition tree.h:614