From cae23fd0988e48cb16d27fade251ce6b43ff9fa9 Mon Sep 17 00:00:00 2001 From: Gabor Horvath Date: Mon, 8 Sep 2025 11:46:24 +0100 Subject: [PATCH] [cxx-interop] Make the size of anonymous types metadata is unchanged Add a null pointer to the value witness table instead of completely skipping emitting the pointer. --- lib/IRGen/GenMeta.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/IRGen/GenMeta.cpp b/lib/IRGen/GenMeta.cpp index c5fc0b6f837fa..1d6b23d4ee9d6 100644 --- a/lib/IRGen/GenMeta.cpp +++ b/lib/IRGen/GenMeta.cpp @@ -6940,11 +6940,13 @@ namespace { } void addValueWitnessTable() { + llvm::Constant* vwtPointer = nullptr; if (auto cd = Target->getClangDecl()) if (auto rd = dyn_cast(cd)) if (rd->isAnonymousStructOrUnion()) - return; - auto vwtPointer = emitValueWitnessTable(/*relative*/ false).getValue(); + vwtPointer = llvm::Constant::getNullValue(IGM.WitnessTablePtrTy); + if (!vwtPointer) + vwtPointer = emitValueWitnessTable(/*relative*/ false).getValue(); B.addSignedPointer(vwtPointer, IGM.getOptions().PointerAuth.ValueWitnessTable, PointerAuthEntity());