<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 03/21/2017 08:45 AM, Hubert Tong
      wrote:<br>
    </div>
    <blockquote
cite="mid:CACvkUqZNomAqCwRA8c+duxZ1PTySEiGPr6W-4z6pJpZgcYJpGg@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr">
        <div>This question was explored in an other context here:<br>
          <a moz-do-not-send="true"
href="http://sourcerytools.com/pipermail/cxx-abi-dev/2013-January/002544.html">http://sourcerytools.com/pipermail/cxx-abi-dev/2013-January/002544.html</a><br>
        </div>
      </div>
    </blockquote>
    <br>
    Very interesting, thanks! So the conclusion was that, "
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    The ABI will need to specify the layout of closure types with weak
    linkage." In some cases (enumerated here:
    <a class="moz-txt-link-freetext" href="https://itanium-cxx-abi.github.io/cxx-abi/abi.html#closure-types">https://itanium-cxx-abi.github.io/cxx-abi/abi.html#closure-types</a>)
    the layout must be fixed (because it must be consistent across
    translation units).<br>
    <br>
    I imagine that size/alignment might also need to be fixed in cases
    where the source program explicitly depends on them (e.g. doing
    sizeof(lambda), new auto(lambda)).<br>
    <br>
     -Hal<br>
    <br>
    <blockquote
cite="mid:CACvkUqZNomAqCwRA8c+duxZ1PTySEiGPr6W-4z6pJpZgcYJpGg@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
        <div>-- HT<br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Tue, Mar 21, 2017 at 9:03 AM, Hal
          Finkel via cfe-dev <span dir="ltr"><<a
              moz-do-not-send="true"
              href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi
            Richard, Chandler, John, et al.,<br>
            <br>
            "Quick" question: What aspects, if any, of a C++ lambda
            (e.g. size, layout, alignment) leak into the ABI or are
            (potentially) semantically visible?<br>
            <br>
            Context...<br>
            <br>
            We're investigating late lowering/outlining schemes to
            improve code generation for OpenMP and other parallel
            programming models. One important advantage of outlining
            late is that the IR-level optimizer still has access to the
            pointer-aliasing and loop information from the containing
            function. There are natural benefits to C++ lambdas as well.
            Lambdas that are used "in place" (i.e. only have one call
            site) should always be inlined, so the issues don't come up
            there, but for lambdas that have multiple call sites, or
            worse, escape (via std::function or some other type-erasure
            mechanism), we can get suboptimal optimization results for
            the body of the lambda. It would seem sad to fix this for
            OpenMP but not for lambdas.<br>
            <br>
            However, optimizing before outlining could mean changes in
            what variables need to be captured (not semantically, but at
            the IR level), and so I'd like to think through what would
            constrain the optimizer's freedom to act in this regard.<br>
            <br>
            John, I'm curious about how this might apply to Objective C
            blocks as well.<br>
            <br>
            Thanks again,<br>
            <br>
            Hal<span class="HOEnZb"><font color="#888888"><br>
                <br>
                -- <br>
                Hal Finkel<br>
                Lead, Compiler Technology and Programming Languages<br>
                Leadership Computing Facility<br>
                Argonne National Laboratory<br>
                <br>
                ______________________________<wbr>_________________<br>
                cfe-dev mailing list<br>
                <a moz-do-not-send="true"
                  href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
                <a moz-do-not-send="true"
                  href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev"
                  rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
              </font></span></blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <pre class="moz-signature" cols="72">-- 
Hal Finkel
Lead, Compiler Technology and Programming Languages
Leadership Computing Facility
Argonne National Laboratory</pre>
  </body>
</html>