Support linking Rust code into a C++ binary
This is based on a version of my upstream PR:
https://github.com/bazelbuild/rules_rust/pull/1350
Change-Id: Ica7097c10666d2e0017336cf7d81420605238493
Signed-off-by: Brian Silverman <bsilver16384@gmail.com>
diff --git a/build_tests/rust_in_cc.rs b/build_tests/rust_in_cc.rs
new file mode 100644
index 0000000..0810609
--- /dev/null
+++ b/build_tests/rust_in_cc.rs
@@ -0,0 +1,19 @@
+extern "C" {
+ fn c_return5() -> u8;
+ fn c_take5(x: *mut u8);
+}
+
+#[no_mangle]
+pub unsafe extern "C" fn rust_return5() -> i32 {
+ let layout = std::alloc::Layout::from_size_align(1, 1).unwrap();
+ let a = std::alloc::alloc(layout);
+ *a = c_return5();
+ // Do something so the compiler can't optimize out the alloc+free pair, which would invalidate
+ // this test.
+ if *a != 5 {
+ c_take5(a);
+ } else {
+ std::alloc::dealloc(a, layout);
+ }
+ 5
+}