summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_error_codes/src/error_codes/E0081.md
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_error_codes/src/error_codes/E0081.md')
-rw-r--r--compiler/rustc_error_codes/src/error_codes/E0081.md37
1 files changed, 37 insertions, 0 deletions
diff --git a/compiler/rustc_error_codes/src/error_codes/E0081.md b/compiler/rustc_error_codes/src/error_codes/E0081.md
new file mode 100644
index 000000000..b834a734c
--- /dev/null
+++ b/compiler/rustc_error_codes/src/error_codes/E0081.md
@@ -0,0 +1,37 @@
+A discriminant value is present more than once.
+
+Erroneous code example:
+
+```compile_fail,E0081
+enum Enum {
+ P = 3,
+ X = 3, // error!
+ Y = 5,
+}
+```
+
+Enum discriminants are used to differentiate enum variants stored in memory.
+This error indicates that the same value was used for two or more variants,
+making it impossible to distinguish them.
+
+```
+enum Enum {
+ P,
+ X = 3, // ok!
+ Y = 5,
+}
+```
+
+Note that variants without a manually specified discriminant are numbered from
+top to bottom starting from 0, so clashes can occur with seemingly unrelated
+variants.
+
+```compile_fail,E0081
+enum Bad {
+ X,
+ Y = 0, // error!
+}
+```
+
+Here `X` will have already been specified the discriminant 0 by the time `Y` is
+encountered, so a conflict occurs.