Properly handle enum discriminant overflows.

This both checks for enum values that are illegal due to overflow and
ensures we do not overflow on valid enums.
diff --git a/tests/ui/enum_overflows.rs b/tests/ui/enum_overflows.rs
new file mode 100644
index 0000000..3f351f0
--- /dev/null
+++ b/tests/ui/enum_overflows.rs
@@ -0,0 +1,17 @@
+#[cxx::bridge]
+mod ffi {
+    enum Good1 {
+        A = 0xffffffff,
+    }
+    enum Good2 {
+        B = 0xffffffff,
+        C = 2020,
+    }
+    enum Bad {
+        D = 0xfffffffe,
+        E,
+        F,
+    }
+}
+
+fn main() {}
diff --git a/tests/ui/enum_overflows.stderr b/tests/ui/enum_overflows.stderr
new file mode 100644
index 0000000..3d1b370
--- /dev/null
+++ b/tests/ui/enum_overflows.stderr
@@ -0,0 +1,9 @@
+error: overflowed on value after 4294967295
+  --> $DIR/enum_overflows.rs:10:5
+   |
+10 | /     enum Bad {
+11 | |         D = 0xfffffffe,
+12 | |         E,
+13 | |         F,
+14 | |     }
+   | |_____^