<div dir="ltr">Hi Jordan,Ted,Richard<div>Any inputs on this patch?</div><div><a href="http://llvm-reviews.chandlerc.com/D1580" style="font-family:arial,sans-serif;font-size:13px" target="_blank">http://llvm-reviews.chandlerc.com/D1580</a><br>


</div><div><br></div><div>Thanks</div><div class="gmail_extra">Karthik Bhat<br><br><div class="gmail_quote">On Tue, Sep 3, 2013 at 7:40 PM, Karthik Bhat <span dir="ltr"><<a href="mailto:blitz.opensource@gmail.com" target="_blank">blitz.opensource@gmail.com</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi jordan_rose,<br>
<br>
Hi All,<br>
Out of bound access of array of structures/unions are not reported. Added a patch to handle the same.<br>
Please let me know if it is good to commit.<br>
Thanks<br>
Karthik Bhat<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1580" target="_blank">http://llvm-reviews.chandlerc.com/D1580</a><br>
<br>
Files:<br>
  lib/Sema/SemaChecking.cpp<br>
  test/SemaCXX/array-bounds.cpp<br>
<br>
Index: lib/Sema/SemaChecking.cpp<br>
===================================================================<br>
--- lib/Sema/SemaChecking.cpp<br>
+++ lib/Sema/SemaChecking.cpp<br>
@@ -6373,6 +6373,12 @@<br>
           CheckArrayAccess(rhs);<br>
         return;<br>
       }<br>
+      case Stmt::MemberExprClass: {<br>
+        const MemberExpr *memExpr = cast<MemberExpr>(expr);<br>
+        if (const Expr *base = memExpr->getBase())<br>
+          CheckArrayAccess(base);<br>
+        return;<br>
+      }<br>
       default:<br>
         return;<br>
     }<br>
Index: test/SemaCXX/array-bounds.cpp<br>
===================================================================<br>
--- test/SemaCXX/array-bounds.cpp<br>
+++ test/SemaCXX/array-bounds.cpp<br>
@@ -253,3 +253,20 @@<br>
        int a[128]; // expected-note {{array 'a' declared here}}<br>
        a[(unsigned char)'\xA1'] = 1; // expected-warning {{array index 161 is past the end of the array}}<br>
 }<br>
+<br>
+typedef struct {<br>
+    int a;<br>
+} structTest;<br>
+<br>
+void<br>
+test_arraystructOverflow() {<br>
+  structTest data[2];  // expected-note 2 {{array 'data' declared here}}<br>
+  if (!data[1].a && !data[2].a) {  // expected-warning {{array index 2 is past the end of the array (which contains 2 elements)}}<br>
+    data[2].a = 1;  // expected-warning {{array index 2 is past the end of the array (which contains 2 elements)}}<br>
+  }<br>
+  return;<br>
+}<br>
+<br>
+<br>
+<br>
+<br>
</blockquote></div><br></div></div>