tbaeder added inline comments.

================
Comment at: clang/lib/AST/Interp/ByteCodeExprGen.cpp:1417-1418
+      assert(!BD->getHoldingVar()); // FIXME
+      if (!this->allocateVariable(BD, BD->getBinding()))
+        return false;
+    }
----------------
aaron.ballman wrote:
> tbaeder wrote:
> > aaron.ballman wrote:
> > > <uncertain>Is this correct? IIRC, the decomposition declaration is its 
> > > own object, but the bindings themselves are references back to the 
> > > decomposition declaration object directly and so they're not distinct 
> > > objects themselves (they're more like aliases).</uncertain>
> > Is this not reflected in the individual bindings? What does it mean that 
> > the bindings aren't "distinct objects themselves"?
> Bindings are basically a label back to an object. Taking the easy case of a 
> structure being bound:
> ```
> struct S { int i, j; } s;
> 
> int main() {
>   auto [val1, val2] = s;
>   return val1 + val2;
> }
> ```
> The way this works under the hood is akin to:
> ```
> struct S { int i, j; } s;
> 
> int main() {
>   S __s = s; // This is the decomposition declaration
>   return __s.i + __s.j; // And the structured bindings give alternative names 
> to the fields in the decomposition declaration
> }
> ```
> so there's no allocation made for `val1` or `val2` because they're not really 
> objects, just names. You can see that in: https://godbolt.org/z/sdj3Mvqhb 
> (note the LLVM IR, which is identical between `foo` and `bar` aside from 
> debug info).
Ah, I see. I guess my way works as well, but yours is better, so I'll change 
the patch. I can basically replace the added stuff in `VisitDeclRefExpr()` by 
just `return this->visit(BD->getBinding())` and that will give me the right 
thing. I hope that way I can remove some of the `BindingDecl` special cases 
I've added as well.

Thanks!


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138802/new/

https://reviews.llvm.org/D138802

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to