commit 305046565054708c0a4b0c6c34c7e5b30ebaf801
Author: David Malcolm <dmalcolm(a)redhat.com>
Date: Tue Aug 30 19:13:36 2011 -0400
cpychecker: simplification of State.get_field_region
libcpychecker/absinterp.py | 43 +++++++++++++++----------------------------
1 files changed, 15 insertions(+), 28 deletions(-)
---
diff --git a/libcpychecker/absinterp.py b/libcpychecker/absinterp.py
index 8bfdc07..69a8537 100644
--- a/libcpychecker/absinterp.py
+++ b/libcpychecker/absinterp.py
@@ -627,34 +627,21 @@ class State:
#cr.debug()
log('target: %r %s ', cr.target, cr.target)
log('field: %r', cr.field)
- #fr = FIXME #self.make_field_region(target, field)
- if 1: # fr not in self.region_for_var:
- if 1: # cr.target not in self.region_for_var:
- log('foo')
- if isinstance(cr.target, gcc.MemRef):
- ptr = self.eval_rvalue(cr.target.operand, loc) # FIXME
- log('ptr: %r', ptr)
- self.raise_any_null_ptr_deref(cr, ptr)
- if isinstance(ptr, UnknownValue):
- # It could be NULL; it could be non-NULL
- # Split the analysis
- # Non-NULL pointer:
- log('splitting %s into non-NULL/NULL pointers', cr)
- self.raise_split_value(ptr)
- check_isinstance(ptr, PointerToRegion)
- return self.make_field_region(ptr.region, cr.field.name)
- elif isinstance(cr.target, gcc.VarDecl):
- log('bar')
- vr = self.var_region(cr.target)
- log('%s', vr)
- return self.make_field_region(vr, cr.field.name)
- elif isinstance(cr.target, gcc.ComponentRef):
- # nested field:
- vr = self.get_field_region(cr.target, loc)
- log('%s', vr)
- return self.make_field_region(vr, cr.field.name)
- log('cr: %r %s', cr, cr)
- return self.region_for_var[cr]
+ if isinstance(cr.target, gcc.MemRef):
+ ptr = self.eval_rvalue(cr.target.operand, loc) # FIXME
+ log('ptr: %r', ptr)
+ self.raise_any_null_ptr_deref(cr, ptr)
+ if isinstance(ptr, UnknownValue):
+ # It could be NULL; it could be non-NULL
+ # Split the analysis
+ # Non-NULL pointer:
+ log('splitting %s into non-NULL/NULL pointers', cr)
+ self.raise_split_value(ptr)
+ check_isinstance(ptr, PointerToRegion)
+ return self.make_field_region(ptr.region, cr.field.name)
+
+ target_region = self.eval_lvalue(cr.target, loc)
+ return self.make_field_region(target_region, cr.field.name)
def string_constant_region(self, expr, loc):
log('string_constant_region: %s', expr)
Show replies by date