c++: generic lambda and -fsanitize=vla-bound [PR93822]
authorJason Merrill <jason@redhat.com>
Fri, 1 May 2020 17:53:32 +0000 (13:53 -0400)
committerJason Merrill <jason@redhat.com>
Fri, 1 May 2020 17:53:32 +0000 (13:53 -0400)
commitbcbf334afe091ad7d0f5ffe164299f8730cf41d1
tree5d5c1f2cf82369bb41a4ed14a2ba97fdfba27181
parentafb9b7108104a73e8ac7a9b8e6875870e5ca4bbb
c++: generic lambda and -fsanitize=vla-bound [PR93822]

Within the generic lambda the VLA capture proxy VAR_DECL has DECL_VALUE_EXPR
which is a NOP_EXPR to the VLA type of the proxy.  The problem here was that
when instantiating we were tsubsting that type twice, once for the type of
the DECL and once for the type of the NOP_EXPR, and getting two
different (though equivalent) types.  Then gimplify_type_sizes fixed up the
type of the DECL, but that didn't affect the type of the NOP_EXPR, leading
to sadness.

Fixed by directly reusing the type from the DECL.

gcc/cp/ChangeLog
2020-05-01  Jason Merrill  <jason@redhat.com>

PR c++/93822
* pt.c (tsubst_decl): Make sure DECL_VALUE_EXPR continues to have
the same type as the variable.
gcc/cp/ChangeLog
gcc/cp/pt.c