aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.cc
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2024-03-10 17:49:06 +0100
committerIain Buclaw <ibuclaw@gdcproject.org>2024-03-10 19:06:11 +0100
commita84b98c62d90bf9e8b01038f624a62725e6a44db (patch)
treeb67edf44624f2abe1af29df34ddec6b0fd441bce /gcc/tree-vect-loop.cc
parent8fe27ed193d60f6cd8b34761858a720c95eabbdb (diff)
downloadgcc-a84b98c62d90bf9e8b01038f624a62725e6a44db.zip
gcc-a84b98c62d90bf9e8b01038f624a62725e6a44db.tar.gz
gcc-a84b98c62d90bf9e8b01038f624a62725e6a44db.tar.bz2
d: Fix -fpreview=in ICEs with forward referenced parameter [PR112285]
The way that the target hook preferPassByRef is implemented, it relied on the GCC "back-end" tree type to determine whether or not to use `ref' ABI for D `in' parameters; e.g: prefer by value if it is expected that the target will pass the type around in registers. Building the GCC tree type depends on the AST type being complete - all semantic processing is finished - but as this hook is called from the front-end, this will not be the case for forward referenced or self-referencing types. The consensus in upstream is that `in' parameters should always be implicitly `ref', but as the front-end does not yet support all types being rvalue references, limit this just static arrays and structs. PR d/112285 PR d/112290 gcc/d/ChangeLog: * d-target.cc (Target::preferPassByRef): Return true for all static array and struct types. gcc/testsuite/ChangeLog: * gdc.dg/pr112285.d: New test. * gdc.dg/pr112290.d: New test.
Diffstat (limited to 'gcc/tree-vect-loop.cc')
0 files changed, 0 insertions, 0 deletions