[clang] [ARM] Empty structs are 1-byte for C++ ABI (PR #124762)

Oliver Stannard via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 29 08:45:51 PST 2025


================
@@ -366,9 +387,15 @@ ABIArgInfo ARMABIInfo::classifyArgumentType(QualType Ty, bool isVariadic,
     return getNaturalAlignIndirect(Ty, RAA == CGCXXABI::RAA_DirectInMemory);
   }
 
-  // Ignore empty records.
-  if (isEmptyRecord(getContext(), Ty, true))
-    return ABIArgInfo::getIgnore();
+  // Empty records are either ignored completely or passed as if they were a
+  // 1-byte object, depending on the ABI and language standard.
+  if (isEmptyRecord(getContext(), Ty, true) ||
+      getContext().getTypeSize(Ty) == 0) {
+    if (shouldIgnoreEmptyArg(Ty))
----------------
ostannard wrote:

I wasn't aware of the `-fclang-abi-compat` option, but I think that would be worth adding for this. I'll also add a release note as suggested in #124760.

https://github.com/llvm/llvm-project/pull/124762


More information about the cfe-commits mailing list