diff options
| author | Luqman Aden <laden@csclub.uwaterloo.ca> | 2014-12-04 16:55:56 -0500 |
|---|---|---|
| committer | Luqman Aden <laden@csclub.uwaterloo.ca> | 2014-12-28 19:40:47 -0500 |
| commit | e6b6234e66539a3e80aa48281ea1b72464eb90df (patch) | |
| tree | 0a0fe5f8a0d2349cfc5dc894940f87d2d5dff246 | |
| parent | e954fc4385e92907916135244fd2fe0e47b24deb (diff) | |
| download | rust-e6b6234e66539a3e80aa48281ea1b72464eb90df.tar.gz rust-e6b6234e66539a3e80aa48281ea1b72464eb90df.zip | |
librustc: Try looking in tuple fields for nullable enum opt.
| -rw-r--r-- | src/librustc_trans/trans/adt.rs | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/librustc_trans/trans/adt.rs b/src/librustc_trans/trans/adt.rs index 44b86dc03c0..120e894b050 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 } |
