[cfe-dev] Issue where Lambda capture of reference to globals doesn't actually capture anything

Hubert Tong via cfe-dev cfe-dev at lists.llvm.org
Mon Oct 26 16:33:05 PDT 2020

On Mon, Oct 26, 2020 at 1:26 PM Lewis, Cannada via cfe-dev <
cfe-dev at lists.llvm.org> wrote:

> Hello,
> We recently encountered an issue where clang has some unexpected behavior
> with respect to the capture of local references to global variables
> https://godbolt.org/z/KasP9K.
> Most compilers (gcc, MSVC, icc) appear to create a member variable to hold
> the value of `myfoo` and have `dummy` return a size of 16.  Clang does not
> store a member for `myfoo` (in the AST there is no `FieldDecl` for
> `myfoo`).
> This leads to the interesting issue here: https://godbolt.org/z/G59e7M
> Where clang and gcc will print out different values.
> I don’t know if this is a clang issue (known?), or a {gcc,icc,msvc} issue,
> or is implementation defined, but any insight on this would be welcome.
N4861 subclause [expr.prim.lambda.capture] paragraph 11 seems to
apply. The local entity being captured is a reference and it is not
odr-used (see [basic.def.odr] paragraph 4).

> -Drew
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201026/1253879a/attachment.html>

More information about the cfe-dev mailing list