Clarify error for using enum as method receiver
Update the syntax checker to print a more specific error when an enum is
used as a method receiver, rather than printing a misleading "unrecognized
receiver type" error.
This is done because C++ prohibits enums from having member functions.
diff --git a/syntax/check.rs b/syntax/check.rs
index 2098a1b..0aa3837 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -389,6 +389,8 @@
mutability = mutability,
);
cx.error(span, msg);
+ } else if cx.types.enums.contains_key(&receiver.ty.rust) {
+ cx.error(span, "C++ does not allow member functions on enums");
} else if !cx.types.structs.contains_key(&receiver.ty.rust)
&& !cx.types.cxx.contains(&receiver.ty.rust)
&& !cx.types.rust.contains(&receiver.ty.rust)
diff --git a/tests/ui/enum_receiver.rs b/tests/ui/enum_receiver.rs
new file mode 100644
index 0000000..a27f274
--- /dev/null
+++ b/tests/ui/enum_receiver.rs
@@ -0,0 +1,11 @@
+#[cxx::bridge]
+mod ffi {
+ enum Enum {
+ Variant,
+ }
+ extern "Rust" {
+ fn f(self: &Enum);
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/enum_receiver.stderr b/tests/ui/enum_receiver.stderr
new file mode 100644
index 0000000..8523c77
--- /dev/null
+++ b/tests/ui/enum_receiver.stderr
@@ -0,0 +1,5 @@
+error: C++ does not allow member functions on enums
+ --> $DIR/enum_receiver.rs:7:20
+ |
+7 | fn f(self: &Enum);
+ | ^^^^^