diff --git a/cpp2rust/converter/converter.cpp b/cpp2rust/converter/converter.cpp index 8cb26e93..a4c0ef1f 100644 --- a/cpp2rust/converter/converter.cpp +++ b/cpp2rust/converter/converter.cpp @@ -891,6 +891,11 @@ bool Converter::VisitCXXRecordDecl(clang::CXXRecordDecl *decl) { } } + EmitRustStructOrUnion(decl); + } else if (decl->isUnion()) { + if (!record_decls_.MarkDefined(GetRecordName(decl))) { + return false; + } EmitRustStructOrUnion(decl); } else { // FIXME: improve error handling diff --git a/tests/unit/out/refcount/union_basic.rs b/tests/unit/out/refcount/union_basic.rs index 0a509632..a9bd9e73 100644 --- a/tests/unit/out/refcount/union_basic.rs +++ b/tests/unit/out/refcount/union_basic.rs @@ -48,10 +48,10 @@ pub fn main() { std::process::exit(main_0()); } fn main_0() -> i32 { - let u: Value = >::default(); + let u: Value = Rc::new(RefCell::new(::default())); (*u.borrow_mut()).i().write(42); - assert!((((((*u.borrow()).i().read()) == 42) as i32) != 0)); + assert!((((*u.borrow()).i().read()) == 42)); (*u.borrow_mut()).f().write(3.140000105E+0); - assert!((((((*u.borrow()).f().read()) == 3.140000105E+0) as i32) != 0)); + assert!((((*u.borrow()).f().read()) == 3.140000105E+0)); return 0; } diff --git a/tests/unit/out/unsafe/union_basic.rs b/tests/unit/out/unsafe/union_basic.rs index 43a45ff6..81e82df3 100644 --- a/tests/unit/out/unsafe/union_basic.rs +++ b/tests/unit/out/unsafe/union_basic.rs @@ -25,8 +25,8 @@ pub fn main() { unsafe fn main_0() -> i32 { let mut u: basic = ::default(); u.i = 42; - assert!(((((u.i) == (42)) as i32) != 0)); + assert!(((u.i) == (42))); u.f = 3.140000105E+0; - assert!(((((u.f) == (3.140000105E+0)) as i32) != 0)); + assert!(((u.f) == (3.140000105E+0))); return 0; } diff --git a/tests/unit/union_basic.c b/tests/unit/union_basic.cpp similarity index 100% rename from tests/unit/union_basic.c rename to tests/unit/union_basic.cpp