-
- Downloads
aarch64: Fix parameter passing for [[no_unique_address]]
This patch makes the ABI code ignore zero-sized [[no_unique_address]] fields when deciding whether something is a HFA or HVA. As things stood, we'd get two sets of -Wpsabi warnings, one when trying to decide whether something was an SVE function, and another when actually processing the function definition or function call. The patch therefore makes aapcs_vfp_sub_candidate honour the CUMULATIVE_ARGS "silent_p" flag where applicable. This doesn't stop all duplicate warnings for parameters, and I suspect we'll get duplicate warnings for return values too, but it should be better than nothing. 2020-04-29 Richard Sandiford <richard.sandiford@arm.com> gcc/ * config/aarch64/aarch64.c (aarch64_function_arg_alignment): Add a comment explaining why we consider even zero-sized fields. (WARN_PSABI_EMPTY_CXX17_BASE): New constant. (WARN_PSABI_NO_UNIQUE_ADDRESS): Likewise. (aapcs_vfp_sub_candidate): Replace the boolean pointer parameter avoid_cxx17_empty_base with a pointer to a bitmask. Ignore fields whose DECL_FIELD_ABI_IGNORED bit is set when determining whether something actually is a HFA or HVA. Record whether we see a [[no_unique_address]] field that previous GCCs would not have ignored in this way. (aarch64_vfp_is_call_or_return_candidate): Add a parameter to say whether diagnostics should be suppressed. Update the calls to aapcs_vfp_sub_candidate and report a -Wpsabi warning for the [[no_unique_address]] case. (aarch64_return_in_msb): Update call accordingly, never silencing diagnostics. (aarch64_function_value): Likewise. (aarch64_return_in_memory_1): Likewise. (aarch64_init_cumulative_args): Likewise. (aarch64_gimplify_va_arg_expr): Likewise. (aarch64_pass_by_reference_1): Take a CUMULATIVE_ARGS pointer and use it to decide whether arch64_vfp_is_call_or_return_candidate should be silent. (aarch64_pass_by_reference): Update calls accordingly. (aarch64_vfp_is_call_candidate): Use the CUMULATIVE_ARGS argument to decide whether arch64_vfp_is_call_or_return_candidate should be silent. gcc/testsuite/ * g++.target/aarch64/no_unique_address_1.C: New test. * g++.target/aarch64/no_unique_address_2.C: Likewise.
Showing
- gcc/ChangeLog 30 additions, 0 deletionsgcc/ChangeLog
- gcc/config/aarch64/aarch64.c 106 additions, 53 deletionsgcc/config/aarch64/aarch64.c
- gcc/testsuite/ChangeLog 5 additions, 0 deletionsgcc/testsuite/ChangeLog
- gcc/testsuite/g++.target/aarch64/no_unique_address_1.C 206 additions, 0 deletionsgcc/testsuite/g++.target/aarch64/no_unique_address_1.C
- gcc/testsuite/g++.target/aarch64/no_unique_address_2.C 206 additions, 0 deletionsgcc/testsuite/g++.target/aarch64/no_unique_address_2.C
Loading
Please register or sign in to comment