c++: lvalue_kind tweak
commit49192c41de94b2746cd33366134b6aeaefa6ca2a
authorJason Merrill <jason@redhat.com>
Mon, 3 Oct 2022 21:16:38 +0000 (3 17:16 -0400)
committerJason Merrill <jason@redhat.com>
Wed, 5 Oct 2022 14:09:51 +0000 (5 10:09 -0400)
tree59eea4766af245e0a5857fbdd6e4a2697c799bbf
parent7d935cdd1a6772699ec0ab4f93711928ca4d30a1
c++: lvalue_kind tweak

I was wondering how lvalue_kind handles VIEW_CONVERT_EXPR; in cases where
the type actually changes, it should have the same prvalue->xvalue effect as
ARRAY_REF, since we need to materialize a temporary to get an object we can
reinterpret as another type.

Currently this only fires on builtin-shufflevector-3.c, where we use
VIEW_CONVERT_EXPR to reinterpret a vector as an array.

REALPART_EXPR and IMAGPART_EXPR should also be treated like COMPONENT_REF.
PREINCREMENT_EXPR and PREDECREMENT_EXPR should only be applied to glvalues,
but if for some reason they were applied to a prvalue this would be correct.
TRY_CATCH_EXPR around a prvalue is also questionable, but this is the right
handling.

gcc/cp/ChangeLog:

* tree.cc (lvalue_kind) [VIEW_CONVERT_EXPR]: Change prvalue to
xvalue.
gcc/cp/tree.cc