}
}
- return ty::ExistentialBounds { region_bound: region_bound,
- builtin_bounds: builtin_bounds,
- projection_bounds: projection_bounds };
+ ty::ExistentialBounds::new(
+ region_bound, builtin_bounds, projection_bounds)
}
fn parse_builtin_bounds(&mut self) -> ty::BuiltinBounds {
pub projection_bounds: Vec<PolyProjectionPredicate<'tcx>>,
}
+impl<'tcx> ExistentialBounds<'tcx> {
+ pub fn new(region_bound: ty::Region,
+ builtin_bounds: BuiltinBounds,
+ projection_bounds: Vec<PolyProjectionPredicate<'tcx>>)
+ -> Self {
+ let mut projection_bounds = projection_bounds;
+ ty::sort_bounds_list(&mut projection_bounds);
+ ExistentialBounds {
+ region_bound: region_bound,
+ builtin_bounds: builtin_bounds,
+ projection_bounds: projection_bounds
+ }
+ }
+}
+
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub struct BuiltinBounds(EnumSet<BuiltinBound>);
rscope: &RegionScope,
span: Span,
principal_trait_ref: ty::PolyTraitRef<'tcx>,
- mut projection_bounds: Vec<ty::PolyProjectionPredicate<'tcx>>, // Empty for boxed closures
+ projection_bounds: Vec<ty::PolyProjectionPredicate<'tcx>>, // Empty for boxed closures
partitioned_bounds: PartitionedBounds)
-> ty::ExistentialBounds<'tcx>
{
debug!("region_bound: {:?}", region_bound);
- ty::sort_bounds_list(&mut projection_bounds);
-
- ty::ExistentialBounds {
- region_bound: region_bound,
- builtin_bounds: builtin_bounds,
- projection_bounds: projection_bounds,
- }
+ ty::ExistentialBounds::new(region_bound, builtin_bounds, projection_bounds)
}
/// Given the bounds on an object, determines what single region bound
--- /dev/null
+// Copyright 2015 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.
+
+#![crate_type="lib"]
+
+pub trait Trait {
+ // the issue is sensitive to interning order - so use names
+ // unlikely to appear in libstd.
+ type Issue25467FooT;
+ type Issue25467BarT;
+}
+
+pub type Object = Option<Box<Trait<Issue25467FooT=(),Issue25467BarT=()>>>;
--- /dev/null
+// Copyright 2014 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.
+
+// aux-build:issue-25467.rs
+
+pub type Issue25467BarT = ();
+pub type Issue25467FooT = ();
+
+extern crate issue_25467 as aux;
+
+fn main() {
+ let o: aux::Object = None;
+}