calls: Remove FIXME for cxx17_empty_base_field_p
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 29 Apr 2020 12:47:21 +0000 (13:47 +0100)
committerRichard Sandiford <richard.sandiford@arm.com>
Wed, 29 Apr 2020 12:47:21 +0000 (13:47 +0100)
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.

gcc/ChangeLog
gcc/calls.c
gcc/calls.h

index 67417932afc69b2b3a5138fea1a193948b4816a9..a1100623dc9b2b51f39cb9eed63de5eef9dd0c8e 100644 (file)
@@ -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
index 5bd922779af7144a4310f963428f8d537b509938..8041388c1d202199240223210edafa6749ed5a88 100644 (file)
@@ -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"
index e1c944efbb6f7381e569d71b1ced12f2ac77176f..4ee493607774df26d88136272aa25c6e55c717f8 100644 (file)
@@ -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