Disallow passing a reference to a reference.
diff --git a/syntax/check.rs b/syntax/check.rs
index 0c75de8..a90db49 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -230,6 +230,11 @@
);
}
}
+ if let Type::Ref(ity) = &arg.ty {
+ if let Type::Ref(_) = &ity.inner {
+ cx.error(arg, "Passing a reference to a reference is not supported");
+ }
+ }
}
if let Some(ty) = &efn.ret {
diff --git a/tests/ui/reference_to_reference.rs b/tests/ui/reference_to_reference.rs
new file mode 100644
index 0000000..526d036
--- /dev/null
+++ b/tests/ui/reference_to_reference.rs
@@ -0,0 +1,13 @@
+#[cxx::bridge]
+mod ffi {
+ extern "C" {
+ type ThingC;
+ fn repro_c(t: &&ThingC);
+ }
+ extern "Rust" {
+ type ThingR;
+ fn repro_r(t: &&ThingR);
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/reference_to_reference.stderr b/tests/ui/reference_to_reference.stderr
new file mode 100644
index 0000000..5b3eadc
--- /dev/null
+++ b/tests/ui/reference_to_reference.stderr
@@ -0,0 +1,11 @@
+error: Passing a reference to a reference is not supported
+ --> $DIR/reference_to_reference.rs:5:20
+ |
+5 | fn repro_c(t: &&ThingC);
+ | ^^^^^^^^^^^
+
+error: Passing a reference to a reference is not supported
+ --> $DIR/reference_to_reference.rs:9:20
+ |
+9 | fn repro_r(t: &&ThingR);
+ | ^^^^^^^^^^^