Enable pointer_query caching in -Warray-bounds.
gcc/ChangeLog: * gimple-array-bounds.cc (array_bounds_checker::array_bounds_checker): Define ctor. (array_bounds_checker::get_value_range): Use new member. (array_bounds_checker::check_mem_ref): Same. * gimple-array-bounds.h (array_bounds_checker::array_bounds_checker): Outline ctor. (array_bounds_checker::m_ptr_query): New member.
This commit is contained in:
parent
68e9b7b69a
commit
a62b740d7b
|
@ -24,6 +24,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "tree.h"
|
||||
#include "gimple.h"
|
||||
#include "ssa.h"
|
||||
#include "pointer-query.h"
|
||||
#include "gimple-array-bounds.h"
|
||||
#include "gimple-iterator.h"
|
||||
#include "gimple-walk.h"
|
||||
|
@ -37,7 +38,13 @@ along with GCC; see the file COPYING3. If not see
|
|||
#include "domwalk.h"
|
||||
#include "tree-cfg.h"
|
||||
#include "attribs.h"
|
||||
#include "pointer-query.h"
|
||||
|
||||
array_bounds_checker::array_bounds_checker (struct function *func,
|
||||
range_query *qry)
|
||||
: fun (func), m_ptr_qry (qry)
|
||||
{
|
||||
/* No-op. */
|
||||
}
|
||||
|
||||
// This purposely returns a value_range, not a value_range_equiv, to
|
||||
// break the dependency on equivalences for this pass.
|
||||
|
@ -45,7 +52,7 @@ along with GCC; see the file COPYING3. If not see
|
|||
const value_range *
|
||||
array_bounds_checker::get_value_range (const_tree op, gimple *stmt)
|
||||
{
|
||||
return ranges->get_value_range (op, stmt);
|
||||
return m_ptr_qry.rvals->get_value_range (op, stmt);
|
||||
}
|
||||
|
||||
/* Try to determine the DECL that REF refers to. Return the DECL or
|
||||
|
@ -401,7 +408,7 @@ array_bounds_checker::check_mem_ref (location_t location, tree ref,
|
|||
axssize = wi::to_offset (access_size);
|
||||
|
||||
access_ref aref;
|
||||
if (!compute_objsize (ref, m_stmt, 0, &aref, ranges))
|
||||
if (!m_ptr_qry.get_ref (ref, m_stmt, &aref, 0))
|
||||
return false;
|
||||
|
||||
if (aref.offset_in_range (axssize))
|
||||
|
|
|
@ -20,13 +20,14 @@ along with GCC; see the file COPYING3. If not see
|
|||
#ifndef GCC_GIMPLE_ARRAY_BOUNDS_H
|
||||
#define GCC_GIMPLE_ARRAY_BOUNDS_H
|
||||
|
||||
#include "pointer-query.h"
|
||||
|
||||
class array_bounds_checker
|
||||
{
|
||||
friend class check_array_bounds_dom_walker;
|
||||
|
||||
public:
|
||||
array_bounds_checker (struct function *fun, range_query *v)
|
||||
: fun (fun), ranges (v) { }
|
||||
array_bounds_checker (struct function *, range_query *);
|
||||
void check ();
|
||||
|
||||
private:
|
||||
|
@ -38,8 +39,9 @@ private:
|
|||
|
||||
/* Current function. */
|
||||
struct function *fun;
|
||||
/* Ranger instance. */
|
||||
range_query *ranges;
|
||||
/* A pointer_query object to store information about pointers and
|
||||
their targets in. */
|
||||
pointer_query m_ptr_qry;
|
||||
/* Current statement. */
|
||||
gimple *m_stmt;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue