aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2019-12-23 09:43:35 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2019-12-23 09:43:35 +0000
commit96bea935c08ab0773b02cdeed7a2c066744fe861 (patch)
tree80e8ff4789acbb8c304cc164ccfae9dd7cdec9a7 /gcc/tree-vect-loop.c
parent3bdc221879a222778f65d912da99779ebf3c484d (diff)
downloadgcc-96bea935c08ab0773b02cdeed7a2c066744fe861.zip
gcc-96bea935c08ab0773b02cdeed7a2c066744fe861.tar.gz
gcc-96bea935c08ab0773b02cdeed7a2c066744fe861.tar.bz2
[C++] Fix ICE for binding lax vector conversions to references (PR 93014)
This test: typedef unsigned int v4si __attribute__ ((vector_size(16))); typedef unsigned char v16qi __attribute__ ((vector_size(16))); extern v16qi x; v4si &y = x; ICEs with: a.c:4:11: internal compiler error: in convert_like_real, at cp/call.c:7670 This started with r260780, which had the effect of making lvalue_kind look through VIEW_CONVERT_EXPR in all cases, not just for location wrappers. This also means that: typedef unsigned int v4si __attribute__ ((vector_size(16))); typedef unsigned char v16qi __attribute__ ((vector_size(16))); extern v16qi x; v4si &y = reinterpret_cast<v4si>(x); is now valid despite the result of the cast being an rvalue. The patch attempts to fix that by calling rvalue on the input to the conversion, so that the tree looks the same as for: extern v16qi x; v4si &y = (v4si)x; which is already handled correctly. 2019-12-23 Richard Sandiford <richard.sandiford@arm.com> gcc/cp/ * cvt.c (ocp_convert): Apply rvalue to the source of vector conversions. * typeck.c (build_reinterpret_cast_1): Likewise. gcc/testsuite/ * g++.dg/ext/vector39.C: New test. From-SVN: r279716
Diffstat (limited to 'gcc/tree-vect-loop.c')
0 files changed, 0 insertions, 0 deletions