xref: /netbsd-src/external/gpl3/gcc/dist/gcc/gimple-array-bounds.h (revision b1e838363e3c6fc78a55519254d99869742dd33c)
1 /* Array bounds checking.
2    Copyright (C) 2020-2022 Free Software Foundation, Inc.
3 
4 This file is part of GCC.
5 
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10 
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3.  If not see
18 <http://www.gnu.org/licenses/>.  */
19 
20 #ifndef GCC_GIMPLE_ARRAY_BOUNDS_H
21 #define GCC_GIMPLE_ARRAY_BOUNDS_H
22 
23 #include "pointer-query.h"
24 
25 class array_bounds_checker
26 {
27   friend class check_array_bounds_dom_walker;
28 
29 public:
30   array_bounds_checker (struct function *, range_query *);
31   void check ();
32 
33 private:
34   static tree check_array_bounds (tree *tp, int *walk_subtree, void *data);
35   bool check_array_ref (location_t, tree, gimple *, bool ignore_off_by_one);
36   bool check_mem_ref (location_t, tree, bool ignore_off_by_one);
37   void check_addr_expr (location_t, tree, gimple *);
38   const value_range *get_value_range (const_tree op, gimple *);
39 
40   /* Current function.  */
41   struct function *fun;
42   /* A pointer_query object to store information about pointers and
43      their targets in.  */
44   pointer_query m_ptr_qry;
45   /* Current statement.  */
46   gimple *m_stmt;
47 };
48 
49 #endif // GCC_GIMPLE_ARRAY_BOUNDS_H
50