<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 - [OpenMP] Seg-fault caused by this-capturing lambda in #pragma omp parallel"
   href="https://bugs.llvm.org/show_bug.cgi?id=39694">39694</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>[OpenMP] Seg-fault caused by this-capturing lambda in #pragma omp parallel
          </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>normal
          </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>AS of r345609, OpenMP supports mapping lambdas in target regions. However, if
the lambda captures 'this', and we're no-longer local to the lambda's 'this',
the call on this line:
(<a href="https://github.com/llvm-mirror/clang/commit/36950cc24f63a783faf9a3db208120b496fd8a84#diff-fb23039c21cc555ae2fb3106a2426fb5R1555">https://github.com/llvm-mirror/clang/commit/36950cc24f63a783faf9a3db208120b496fd8a84#diff-fb23039c21cc555ae2fb3106a2426fb5R1555</a>

to CheckCXXThisCapture seg-faults because the Sema "Active This Type" doesn't
exist.

Godbolt link here: <a href="https://godbolt.org/z/W26nsv">https://godbolt.org/z/W26nsv</a>


Min Reproducer is:
template <typename _Op> void algo(_Op __o) {
   #pragma omp parallel
     (void)__o;
 }

 struct S {
   void Foo() {
    algo([this]() {});
  }
};


NOTE that the crash only happens when this is a 'free' function.  More
insidiously, if the algorithm itself is in a structure
(<a href="https://godbolt.org/z/_aKG6l">https://godbolt.org/z/_aKG6l</a>), 'this' will capture the wrong thing (see line
36 in the AST output).</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>