Resolve MSVC "C-linkage specified, but returns UDT" warning
cxxbridge\sources\tests\ffi\lib.rs.cc(1335): warning C4190: 'tests$cxxbridge1$c_return_str' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Str' which is incompatible with C
cxxbridge\include\rust/cxx.h(93): note: see declaration of 'rust::cxxbridge1::Str'
cxxbridge\sources\tests\ffi\lib.rs.cc(1340): warning C4190: 'tests$cxxbridge1$c_return_slice_char' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<const char>' which is incompatible with C
cxxbridge\crate\tests/ffi/tests.h(93): note: see declaration of 'rust::cxxbridge1::Slice<const char>'
cxxbridge\sources\tests\ffi\lib.rs.cc(1345): warning C4190: 'tests$cxxbridge1$c_return_mutsliceu8' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<uint8_t>' which is incompatible with C
cxxbridge\crate\tests/ffi/tests.h(94): note: see declaration of 'rust::cxxbridge1::Slice<uint8_t>'
cxxbridge\sources\tests\ffi\lib.rs.cc(1976): warning C4190: 'tests$cxxbridge1$r_return_str' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Str' which is incompatible with C
cxxbridge\include\rust/cxx.h(93): note: see declaration of 'rust::cxxbridge1::Str'
cxxbridge\sources\tests\ffi\lib.rs.cc(1978): warning C4190: 'tests$cxxbridge1$r_return_sliceu8' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<const uint8_t>' which is incompatible with C
cxxbridge\crate\tests/ffi/tests.h(163): note: see declaration of 'rust::cxxbridge1::Slice<const uint8_t>'
cxxbridge\sources\tests\ffi\lib.rs.cc(1980): warning C4190: 'tests$cxxbridge1$r_return_mutsliceu8' has C-linkage specified, but returns UDT 'rust::cxxbridge1::Slice<uint8_t>' which is incompatible with C
cxxbridge\crate\tests/ffi/tests.h(94): note: see declaration of 'rust::cxxbridge1::Slice<uint8_t>'
diff --git a/gen/src/builtin.rs b/gen/src/builtin.rs
index 7b15b61..65cd703 100644
--- a/gen/src/builtin.rs
+++ b/gen/src/builtin.rs
@@ -20,6 +20,7 @@
pub maybe_uninit: bool,
pub trycatch: bool,
pub ptr_len: bool,
+ pub repr_fat: bool,
pub exception: bool,
pub relocatable: bool,
pub friend_impl: bool,
@@ -230,6 +231,17 @@
out.end_block(Block::Namespace("repr"));
}
+ if builtin.repr_fat {
+ include.array = true;
+ include.cstdint = true;
+ out.begin_block(Block::Namespace("repr"));
+ writeln!(out, "template <typename T>");
+ writeln!(out, "struct Fat final {{");
+ writeln!(out, " T repr;");
+ writeln!(out, "}};");
+ out.end_block(Block::Namespace("repr"));
+ }
+
if builtin.rust_error {
out.next_section();
writeln!(out, "template <>");