Allow enum with undeclared variants as long as it has explicit repr
diff --git a/syntax/check.rs b/syntax/check.rs
index 0e603a6..0e8c469 100644
--- a/syntax/check.rs
+++ b/syntax/check.rs
@@ -221,9 +221,9 @@
fn check_api_enum(cx: &mut Check, enm: &Enum) {
check_reserved_name(cx, &enm.name.rust);
- if enm.variants.is_empty() {
+ if enm.variants.is_empty() && !enm.explicit_repr {
let span = span_for_enum_error(enm);
- cx.error(span, "enums without any variants are not supported");
+ cx.error(span, "explicit #[repr(...)] is required for enum without any variants");
}
}
diff --git a/syntax/mod.rs b/syntax/mod.rs
index 2a3790c..475cec1 100644
--- a/syntax/mod.rs
+++ b/syntax/mod.rs
@@ -91,6 +91,7 @@
pub variants: Vec<Variant>,
pub repr: Atom,
pub repr_type: Type,
+ pub explicit_repr: bool,
}
pub struct ExternFn {
diff --git a/syntax/parse.rs b/syntax/parse.rs
index 25d95e6..38b3dcc 100644
--- a/syntax/parse.rs
+++ b/syntax/parse.rs
@@ -170,6 +170,7 @@
let enum_token = item.enum_token;
let brace_token = item.brace_token;
+ let explicit_repr = repr.is_some();
let mut repr = U8;
match discriminants.inferred_repr() {
Ok(inferred) => repr = inferred,
@@ -191,6 +192,7 @@
variants,
repr,
repr_type,
+ explicit_repr,
}))
}