rs_bindings_from_cc: IR: Check for zero-sizedness when computing field size.
PiperOrigin-RevId: 583332317
Change-Id: I4f9a0a2a79fa404f8a30cec99c074b4924a73e88
diff --git a/rs_bindings_from_cc/importers/cxx_record.cc b/rs_bindings_from_cc/importers/cxx_record.cc
index c3e0ad9..35e3561 100644
--- a/rs_bindings_from_cc/importers/cxx_record.cc
+++ b/rs_bindings_from_cc/importers/cxx_record.cc
@@ -422,15 +422,22 @@
}
}
+ uint64_t size;
+ if (field_decl->isZeroSize(ictx_.ctx_)) {
+ size = 0;
+ } else if (field_decl->isBitField()) {
+ size = field_decl->getBitWidthValue(ictx_.ctx_);
+ } else {
+ size = ictx_.ctx_.getTypeSize(field_decl->getType());
+ }
+
fields.push_back(
{.identifier = GetTranslatedFieldName(field_decl),
.doc_comment = ictx_.GetComment(field_decl),
.type = std::move(type),
.access = TranslateAccessSpecifier(access),
.offset = layout.getFieldOffset(field_decl->getFieldIndex()),
- .size = field_decl->isBitField()
- ? field_decl->getBitWidthValue(ictx_.ctx_)
- : ictx_.ctx_.getTypeSize(field_decl->getType()),
+ .size = size,
.is_no_unique_address =
field_decl->hasAttr<clang::NoUniqueAddressAttr>(),
.is_bitfield = field_decl->isBitField(),