diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2020-04-29 13:47:21 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-04-29 13:47:21 +0100 |
commit | 3bce790414afaaba10e03f7bb41e4aa3279694f5 (patch) | |
tree | e999d1d877735eb30a8cbb90cffeeb6b31c10efd /gcc/calls.c | |
parent | 9be3bb2c0a258fd6a7d3d05d232a21930c757d3c (diff) | |
download | gcc-3bce790414afaaba10e03f7bb41e4aa3279694f5.zip gcc-3bce790414afaaba10e03f7bb41e4aa3279694f5.tar.gz gcc-3bce790414afaaba10e03f7bb41e4aa3279694f5.tar.bz2 |
calls: Remove FIXME for cxx17_empty_base_field_p
This predicate is now used by aarch64 targets.
2020-04-29 Richard Sandiford <richard.sandiford@arm.com>
gcc/
* calls.h (cxx17_empty_base_field_p): Turn into a function declaration.
* calls.c (cxx17_empty_base_field_p): New function. Check
DECL_ARTIFICIAL and RECORD_OR_UNION_TYPE_P in addition to the
previous checks.
Diffstat (limited to 'gcc/calls.c')
-rw-r--r-- | gcc/calls.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/calls.c b/gcc/calls.c index 5bd9227..8041388 100644 --- a/gcc/calls.c +++ b/gcc/calls.c @@ -6261,5 +6261,20 @@ must_pass_va_arg_in_stack (tree type) return targetm.calls.must_pass_in_stack (arg); } +/* Return true if FIELD is the C++17 empty base field that should + be ignored for ABI calling convention decisions in order to + maintain ABI compatibility between C++14 and earlier, which doesn't + add this FIELD to classes with empty bases, and C++17 and later + which does. */ + +bool +cxx17_empty_base_field_p (const_tree field) +{ + return (DECL_FIELD_ABI_IGNORED (field) + && DECL_ARTIFICIAL (field) + && RECORD_OR_UNION_TYPE_P (TREE_TYPE (field)) + && !lookup_attribute ("no_unique_address", DECL_ATTRIBUTES (field))); +} + /* Tell the garbage collector about GTY markers in this source file. */ #include "gt-calls.h" |