aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2020-04-29 13:47:21 +0100
committerRichard Sandiford <richard.sandiford@arm.com>2020-04-29 13:47:21 +0100
commit3bce790414afaaba10e03f7bb41e4aa3279694f5 (patch)
treee999d1d877735eb30a8cbb90cffeeb6b31c10efd
parent9be3bb2c0a258fd6a7d3d05d232a21930c757d3c (diff)
downloadgcc-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.
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/calls.c15
-rw-r--r--gcc/calls.h5
3 files changed, 23 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6741793..a110062 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2020-04-29 Richard Sandiford <richard.sandiford@arm.com>
+
+ * 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.
+
2020-04-29 H.J. Lu <hongjiu.lu@intel.com>
PR target/93654
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"
diff --git a/gcc/calls.h b/gcc/calls.h
index e1c944e..4ee4936 100644
--- a/gcc/calls.h
+++ b/gcc/calls.h
@@ -135,9 +135,6 @@ extern tree get_attr_nonstring_decl (tree, tree * = NULL);
extern void maybe_warn_nonstring_arg (tree, tree);
extern bool get_size_range (tree, tree[2], bool = false);
extern rtx rtx_for_static_chain (const_tree, bool);
-/* FIXME: Remove after all backends are converted. */
-#define cxx17_empty_base_field_p(t) \
- (DECL_FIELD_ABI_IGNORED (t) \
- && !lookup_attribute ("no_unique_address", DECL_ATTRIBUTES (t)))
+extern bool cxx17_empty_base_field_p (const_tree);
#endif // GCC_CALLS_H