[PATCH] D51025: [CodeGen] Fix handling of variables captured by a block that is nested inside a lambda
    Akira Hatanaka via Phabricator via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Mon Aug 20 23:53:02 PDT 2018
    
    
  
ahatanak created this revision.
ahatanak added a reviewer: rjmccall.
Herald added a subscriber: dexonsmith.
Currently IRGen doesn't handle variables captured by a block correctly when the variable is captured by reference by a lambda that encloses the block.
For example, in the following code, the type of capture 'x' in the block literal is a reference to 'id' because 'x' is captured by reference by the enclosing lambda. In this case, copy/dispose functions shouldn't be needed, but currently IRGen emits them.
  void test() {
    id x;
    [&]{ ^{ (void)x; }(); }();
  }
This happens because there are a few places in CGBlocks.cpp that use the variable's type ('id' in the example above) instead of the capture type ('id &' in the example above).
Repository:
  rC Clang
https://reviews.llvm.org/D51025
Files:
  lib/CodeGen/CGBlocks.cpp
  test/CodeGenObjCXX/block-nested-in-lambda.cpp
  test/CodeGenObjCXX/block-nested-in-lambda.mm
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51025.161648.patch
Type: text/x-patch
Size: 10620 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180821/32d94826/attachment.bin>
    
    
More information about the cfe-commits
mailing list