diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2016-10-12 10:15:29 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2016-10-12 14:07:57 -0700 |
| commit | 27043b15af9b1720bdcb6c355df849ebd51e7f8a (patch) | |
| tree | a18e44fe88822453f71d47bfa3b4c89e9d8ed58d | |
| parent | 25ad6a3c124645527f9c3e6024b87e23303fe1fe (diff) | |
| parent | 7badc32005648e7aebe982a076cc677c68937fe4 (diff) | |
| download | rust-27043b15af9b1720bdcb6c355df849ebd51e7f8a.tar.gz rust-27043b15af9b1720bdcb6c355df849ebd51e7f8a.zip | |
Rollup merge of #37110 - TimNN:fix-37109, r=eddyb
normalize tuple pair types in trans Fixes #37109. Note that #37109 is a regression from stable to stable, beta and nightly.
| -rw-r--r-- | src/librustc_trans/common.rs | 3 | ||||
| -rw-r--r-- | src/test/run-pass/issue-37109.rs | 25 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/librustc_trans/common.rs b/src/librustc_trans/common.rs index 6ae5fc1657a..9b893e19894 100644 --- a/src/librustc_trans/common.rs +++ b/src/librustc_trans/common.rs @@ -114,7 +114,8 @@ pub fn type_pair_fields<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>, ty: Ty<'tcx>) if tys.len() != 2 { return None; } - Some([tys[0], tys[1]]) + Some([ccx.tcx().normalize_associated_type(&tys[0]), + ccx.tcx().normalize_associated_type(&tys[1])]) } _ => None } diff --git a/src/test/run-pass/issue-37109.rs b/src/test/run-pass/issue-37109.rs new file mode 100644 index 00000000000..1c893071d55 --- /dev/null +++ b/src/test/run-pass/issue-37109.rs @@ -0,0 +1,25 @@ +// Copyright 2016 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait ToRef<'a> { + type Ref: 'a; +} + +impl<'a, U: 'a> ToRef<'a> for U { + type Ref = &'a U; +} + +fn example<'a, T>(value: &'a T) -> (<T as ToRef<'a>>::Ref, u32) { + (value, 0) +} + +fn main() { + example(&0); +} |
