<html>
    <head>
      <base href="http://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 --- - clang loop analyzer fails on some loops"
   href="http://llvm.org/bugs/show_bug.cgi?id=18804">18804</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>clang loop analyzer fails on some loops
          </td>
        </tr>

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

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

        <tr>
          <th>Hardware</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </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>-New Bugs
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>hlandau@devever.net
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvmbugs@cs.uiuc.edu
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=12044" name="attach_12044" title="Two test cases where clang loop analyzer fails">attachment 12044</a> <a href="attachment.cgi?id=12044&action=edit" title="Two test cases where clang loop analyzer fails">[details]</a></span>
Two test cases where clang loop analyzer fails

gcc4.8 can collapse some loops and clang can't.

The attached test case demonstrates an unusual use of for, if and switch
statements in a macro to define a new control flow statement. gcc 4.8 is
capable of completely collapsing the loops in this, whereas clang3.4 (and
presumably trunk) is not.

gcc's code is equivalent to
  if ((ec = f1()) < 0) return ec;
which is maximally efficient, whereas clang fails to collapse the loop.

Tested with -std=gnu11 -O2, -O3 on gcc4.8 and clang.

I asked in IRC and apparently this is a failure of the loop analyzer to analyze
the loop.</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>