From b952c0e4e9f3c169c6647fd05fef68ae1119865a Mon Sep 17 00:00:00 2001 From: Sean Patrick Santos Date: Wed, 8 Jul 2015 20:51:47 -0600 Subject: [PATCH] Add comments about the checks for recursive variant definition, as requested by @nrc. --- src/librustc/middle/check_static_recursion.rs | 4 ++++ src/test/compile-fail/issue-23302.rs | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/librustc/middle/check_static_recursion.rs b/src/librustc/middle/check_static_recursion.rs index 1d0cfe508c7c2..312a4708e8dde 100644 --- a/src/librustc/middle/check_static_recursion.rs +++ b/src/librustc/middle/check_static_recursion.rs @@ -27,6 +27,10 @@ struct CheckCrateVisitor<'a, 'ast: 'a> { sess: &'a Session, def_map: &'a DefMap, ast_map: &'a ast_map::Map<'ast>, + // `discriminant_map` is a cache that associates the `NodeId`s of local + // variant definitions with the discriminant expression that applies to + // each one. If the variant uses the default values (starting from `0`), + // then `None` is stored. discriminant_map: RefCell>>, } diff --git a/src/test/compile-fail/issue-23302.rs b/src/test/compile-fail/issue-23302.rs index 62f82ecae4409..7ac8cf45edbef 100644 --- a/src/test/compile-fail/issue-23302.rs +++ b/src/test/compile-fail/issue-23302.rs @@ -8,10 +8,14 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// Check that an enum with recursion in the discriminant throws +// the appropriate error (rather than, say, blowing the stack). enum X { A = X::A as isize, //~ ERROR E0265 } +// Since `Y::B` here defaults to `Y::A+1`, this is also a +// recursive definition. enum Y { A = Y::B as isize, //~ ERROR E0265 B,