On Thu, Mar 10, 2016 at 5:58 PM, Patrick Palka <patr...@parcs.ath.cx> wrote:
> Within a lambda we should implicitly capture an outer const variable
> only if it's odr-used in the body of the lambda.  But we are currently
> making the decision of whether to capture such a variable, or else to
> fold it to a constant, too early -- before we can know whether it's
> being odr-used or not.  So we currently always fold a const variable to
> a constant if possible instead of otherwise capturing it, but of course
> doing this is wrong if e.g. the address of this variable is taken inside
> the lambda's body.
>
> This patch reverses the behavior of process_outer_var_ref, so that we
> always implicitly capture a const variable if it's capturable, instead
> of always trying to first fold it to a constant.  This behavior however
> is wrong too, and introduces a different but perhaps less important
> regression: if we implicitly capture by value a const object that is not
> actually odr-used within the body of the lambda, we may introduce a
> redundant call to its copy/move constructor, see pr70121-2.C.
>
> Ideally we should be capturing a variable only if it's not odr-used

Er, this sentence should read

  Ideally we should be _implicitly_ capturing a variable only if it
_is_ odr-used ...

Reply via email to