<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW " title="NEW --- - False negative for -Wdivision-by-zero" href="https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_bugs_show-5Fbug.cgi-3Fid-3D24337&d=AwMBaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=pF93YEPyB-J_PERP4DUZOJDzFVX5ZQ57vQk33wu0vio&m=lOzORkJqzrQz-Mwqtq1c8BKYE7Lfu4EQqA7r6ZaceM4&s=KhBjmb3wR8BxKkpwcjqEIPw2LQnv0yAR3s9nhwFv6co&e=">24337</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>False negative for -Wdivision-by-zero
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Windows NT
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>davide@freebsd.org
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>dgregor@apple.com, llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>int main(void)
{
  int z = 0;
  int x = 1 / z;
  (void)x;
  int y = 1 / 0;
  (void)y;
  return (0);
}

clang warns on the assignment of y, but it doesn't on the assignment of x.
For what it's worth, GCC seems to have the same behaviour, but the two cases
seems pretty much identical to me so I think we should warn on the first as
well.

I dug into that a little bit more, and we seem to fail evaluatingAsInt the RHS
of the expression:

7428        if (RHS.get()->EvaluateAsInt(RHSValue, S.Context)) {
[...]

(gdb) p RHS.get()->dump()
ImplicitCastExpr 0x8080c9f38 'int' <LValueToRValue>
`-DeclRefExpr 0x8080c9f10 'int' lvalue Var 0x8080c9de8 'z' 'int'
$7 = void

Is this a limitation or is this the expected behaviour? Any ideas on how to fix
this?</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>