Hi Jordy,<br><br>I've applied a minimum of your patch that fixes PR7218. Could you please make a new patch of the rest of the logic?<br><br>A specific question about the part of the patch that I adopted:<br><br>+bool RegionStoreManager::canHaveDirectBinding (const MemRegion *R) {<br>
+  // Arrays can't have direct binding -- must bind to elements<br>+  if (const TypedRegion *TR = dyn_cast<TypedRegion>(R))    <br>+    if (TR->getValueType(getContext())->isArrayType())   <br>+      return false;<br>
+  <br>+  // Symbolic regions are the same, unless they are references<br>+  if (const SymbolicRegion *SR = dyn_cast<SymbolicRegion>(R))<br>+    if (!SR->getSymbol()->getType(getContext())->isReferenceType())<br>
+      return false;<br><br>I'm not very clear about the semantics of this case. When could a symbolic region have reference type? Could you please illustrate it a bit, better with an example.<br><br>+  <br>+  return true;<br>
+}<br><br><div class="gmail_quote">On Sat, May 29, 2010 at 8:11 AM, Jordy Rose <span dir="ltr"><<a href="mailto:jediknil@belkadan.com">jediknil@belkadan.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<br>
Fixes PR7218 "Assigning to buf[0] makes buf[1] valid" by not allowing<br>
arrays and symbolic regions to have direct bindings, only bindings to<br>
element 0. (The exception is symbolic regions for references, since they<br>
don't have elements.)<br>
<br>
On top of that, adds support for calloc(), treating its result as a<br>
malloc-region that needs freeing, whose contents are initialized to 0.<br>
<br>
I'm not entirely happy with the replacement of *p with p[0] in<br>
GRExprEngine, but that seems to be the last place where you can tell the<br>
difference between a binding to p and a binding to p[0].<br>
<br>
This could be split into two patches, of course, though I worked on it all<br>
simultaneously. The calloc() part requires a way to set default elements<br>
for regions -- I did it by using the assumption that arrays and symbolic<br>
regions couldn't get direct bindings, only default ones, but it could also<br>
be done by adding another method to Store (really RegionStore).<br>
<br>
Jordy<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br>