[PATCH] D42813: [Debug] Annotate compiler generated range-for loop variables.
Matt Davis via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 6 09:21:47 PST 2018
mattd added inline comments.
================
Comment at: lib/Sema/SemaStmt.cpp:2346
+ // Assume the variables are nested in the inner scope (loop body).
+ const auto DepthStr = std::to_string(S->getDepth() >> 1);
VarDecl *BeginVar = BuildForRangeVarDecl(*this, ColonLoc, AutoType,
----------------
dblaikie wrote:
> Why shifted right/divided by two? (I'd probably write this as "/ 2" rather thane ">> 1" if this is what's)
>
> I guess this is because a range-for introduces two (actually 3, I think) scopes?
>
> But what about if there are other random scopes that could be present? Does that adversely affect anything here?
Thanks for the comment. Honestly, I discovered the pattern after crafting up a tightly nested loop example, and realized that my Depths were 2,4,6... for each range loop respectively. I think it's two scopes and the range variables (__begin, __end, __range) are nestled inside each inner scope. Thus each range loop seems to be created of 2 scopes.
If there are other scopes between two range-loops, such as the 'if' in the example below, then the outer-most "for" is range1/begin1/end1, followed by the middle loop: range3/begin3/end3, and the innermost: range4/begin4/end4.
```
for (...) // range1
if (...)
for(...) // range 3
for (...) //range4
```
https://reviews.llvm.org/D42813
More information about the cfe-commits
mailing list