<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </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 - Signed loop variables get implicitly casted to unsigned (clang version >=11)"
   href="https://bugs.llvm.org/show_bug.cgi?id=48387">48387</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Signed loop variables get implicitly casted to unsigned (clang version >=11)
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>OpenMP
          </td>
        </tr>

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

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

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

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

        <tr>
          <th>Severity</th>
          <td>release blocker
          </td>
        </tr>

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

        <tr>
          <th>Component</th>
          <td>Clang Compiler Support
          </td>
        </tr>

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

        <tr>
          <th>Reporter</th>
          <td>christoph.schwarzmeier@fau.de
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Compiling the following code snippet with `clang++ -fopenmp -Wsign-conversion`
generates warnings about the implicit conversion of the loop variables'
signedness:
warning: implicit conversion changes signedness: 'int' to 'unsigned int'
[-Wsign-conversion]

However, according to the OpenMP 5.0 standard, a loop variable can be "a
variable of a signed or unsigned integer type" [1], such that there should be
no type conversion required in the provided example.

This issue was initially observed with clang 11.0 on Ubuntu 18.04, but can also
be reproduced with the current clang x86-64 trunk version (tested on
"goodbolt.org").


#include <iostream>

int main() {
   int min = -10;
   int max = 10;

   #pragma omp parallel for
   for (int i = min; i <= max; ++i) {
      std::cout << i << std::endl;
   }

   return 0;
}


[1] <a href="https://www.openmp.org/spec-html/5.0/openmpsu40.html#x63-1260002.9.1">https://www.openmp.org/spec-html/5.0/openmpsu40.html#x63-1260002.9.1</a></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>