<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 - Deferred Diagnostics still fire if call is constexpr"
   href="https://bugs.llvm.org/show_bug.cgi?id=46910">46910</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Deferred Diagnostics still fire if call is constexpr
          </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>enhancement
          </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>erich.keane@intel.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>See this example:
<a href="https://godbolt.org/z/znj5Pv">https://godbolt.org/z/znj5Pv</a>


constexpr float bar(long double f) { return f;}

void foo() {
  #pragma omp target
  {
      float error = 0.0;
      #pragma omp parallel for reduction(max:error)
      for (int i = 0; i < 20; ++i) {
        constexpr auto x = bar(1.1);
      }
  }
}

Diagnostic is:
<source>:10:28: error: 'bar' requires 128 bit size 'long double' type support,
but device 'nvptx64-nvidia-cuda' does not support it

        constexpr auto x = bar(1.1);

                           ^

<source>:2:17: note: 'bar' defined here

constexpr float bar(long double f) { return f;}


However, the invocation of 'bar' never makes it to the device, since it is
evaluated at compile time.  Delayed diagnostics for uses should likely be
relaxed if it is evaluated during constant evaluation.</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>