On Mon, Nov 14, 2016 at 12:04:24AM -0500, Jason Merrill wrote: > On Wed, Nov 9, 2016 at 7:24 AM, Jakub Jelinek <ja...@redhat.com> wrote: > > The match.pd hunk is needed, otherwise the generic folding happily folds > > int arr[2]; > > ... > > auto [ x, y ] = arr; > > &x == &arr[0] > > into 0, because it thinks x and arr are distinct VAR_DECLs. Though, if > > such comparisons are required to be folded in constexpr contexts under > > certain conditions, we'd need to handle the DECL_VALUE_EXPRs in constexpr.c > > somehow. > > What do you think of this approach instead?
As Richard said, we'd need to change the 3 other functions too. And there is additional complication, for OpenMP we defer gimplification of vars with DECL_VALUE_EXPRs on them, because they often get a different DECL_VALUE_EXPR. So if optimizers look through DECL_VALUE_EXPR rather than punt on vars with DECL_VALUE_EXPR, we risk the undesirable value expressions might leak into the IL. So I think we want just punt on vars with DECL_VALUE_EXPR (perhaps even in those 4 functions), except for constexpr.c where we perhaps special case the decomposition vars or something similar. Jakub