From e6b6234e66539a3e80aa48281ea1b72464eb90df Mon Sep 17 00:00:00 2001 From: Luqman Aden Date: Thu, 4 Dec 2014 16:55:56 -0500 Subject: [PATCH] librustc: Try looking in tuple fields for nullable enum opt. --- src/librustc_trans/trans/adt.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/librustc_trans/trans/adt.rs b/src/librustc_trans/trans/adt.rs index 44b86dc03c06..120e894b0502 100644 --- a/src/librustc_trans/trans/adt.rs +++ b/src/librustc_trans/trans/adt.rs @@ -375,6 +375,21 @@ fn find_discr_field_candidate<'tcx>(tcx: &ty::ctxt<'tcx>, ty: Ty<'tcx>) -> Optio None }, + // Can we use one of the fields in this tuple? + ty::ty_tup(ref tys) => { + for (j, &ty) in tys.iter().enumerate() { + match find_discr_field_candidate(tcx, ty) { + Some(v) => { + let mut discrfield = vec![j]; + discrfield.extend(v.into_iter()); + return Some(discrfield); + } + None => continue + } + } + None + }, + // Anything else is not a pointer _ => None }