folly/Foreach.h: allow FOR_EACH to be nested with no shadowing
Summary:
Prior to this change, any nested use of FOR_EACH would
induce a shadowed declaration for each of the two local
state variables it declares.
This makes the names of those variables __LINE__-dependent,
so that there is no shadowing, as long as each nested use
is on a different line.
This also adds a new test that (prior to this change) would fail to
compile with an option like -Werror=shadow-compatible-local.
Since this change relies on cpp token concatenation, I have included
The fix defines a new helper macro, _FE_ANON, to derive each new variable
name. I wondered whether to do this for every other FOR_* macro here, but
since so far, I have encountered more than 10 cases of nested FOR_EACH
uses in a large corpus, but no nesting of any other FOR_* macro, I am
content to do it only for this one.
Reviewed By: yfeldblum
Differential Revision:
D3992956
fbshipit-source-id:
f26fba89bc661bb9d22747dec0acdcf8c648fb83