commit
3eeaa84a50
|
@ -110,7 +110,7 @@ impl<'a> Archive<'a> {
|
||||||
lto: bool) -> io::IoResult<()> {
|
lto: bool) -> io::IoResult<()> {
|
||||||
let object = format!("{}.o", name);
|
let object = format!("{}.o", name);
|
||||||
let bytecode = format!("{}.bc.deflate", name);
|
let bytecode = format!("{}.bc.deflate", name);
|
||||||
let mut ignore = vec!(METADATA_FILENAME, bytecode.as_slice());
|
let mut ignore = vec!(bytecode.as_slice(), METADATA_FILENAME);
|
||||||
if lto {
|
if lto {
|
||||||
ignore.push(object.as_slice());
|
ignore.push(object.as_slice());
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,11 +12,14 @@
|
||||||
use middle::ty;
|
use middle::ty;
|
||||||
use middle::typeck::check::FnCtxt;
|
use middle::typeck::check::FnCtxt;
|
||||||
use middle::typeck::infer;
|
use middle::typeck::infer;
|
||||||
|
use middle::typeck::infer::resolve_type;
|
||||||
|
use middle::typeck::infer::resolve::try_resolve_tvar_shallow;
|
||||||
|
|
||||||
use std::result::{Err, Ok};
|
use std::result::{Err, Ok};
|
||||||
use std::result;
|
use std::result;
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::codemap::Span;
|
use syntax::codemap::Span;
|
||||||
|
use util::ppaux::Repr;
|
||||||
|
|
||||||
// Requires that the two types unify, and prints an error message if they
|
// Requires that the two types unify, and prints an error message if they
|
||||||
// don't.
|
// don't.
|
||||||
|
@ -58,6 +61,13 @@ pub fn eqtype(fcx: &FnCtxt, sp: Span, expected: ty::t, actual: ty::t) {
|
||||||
// Checks that the type `actual` can be coerced to `expected`.
|
// Checks that the type `actual` can be coerced to `expected`.
|
||||||
pub fn coerce(fcx: &FnCtxt, sp: Span, expected: ty::t, expr: &ast::Expr) {
|
pub fn coerce(fcx: &FnCtxt, sp: Span, expected: ty::t, expr: &ast::Expr) {
|
||||||
let expr_ty = fcx.expr_ty(expr);
|
let expr_ty = fcx.expr_ty(expr);
|
||||||
|
debug!("demand::coerce(expected = {}, expr_ty = {})",
|
||||||
|
expected.repr(fcx.ccx.tcx),
|
||||||
|
expr_ty.repr(fcx.ccx.tcx));
|
||||||
|
let expected = if ty::type_needs_infer(expected) {
|
||||||
|
resolve_type(fcx.infcx(), expected,
|
||||||
|
try_resolve_tvar_shallow).unwrap_or(expected)
|
||||||
|
} else { expected };
|
||||||
match fcx.mk_assignty(expr, expr_ty, expected) {
|
match fcx.mk_assignty(expr, expr_ty, expected) {
|
||||||
result::Ok(()) => { /* ok */ }
|
result::Ok(()) => { /* ok */ }
|
||||||
result::Err(ref err) => {
|
result::Err(ref err) => {
|
||||||
|
|
|
@ -24,9 +24,11 @@ impl CrateId {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn remove_package_from_database() {
|
pub fn remove_package_from_database() {
|
||||||
let mut lines_to_use: Vec<&CrateId> = Vec::new(); //~ ERROR cannot infer an appropriate lifetime
|
let mut lines_to_use: Vec<&CrateId> = Vec::new();
|
||||||
let push_id = |installed_id: &CrateId| {
|
let push_id = |installed_id: &CrateId| {
|
||||||
lines_to_use.push(installed_id);
|
lines_to_use.push(installed_id);
|
||||||
|
//~^ ERROR cannot infer an appropriate lifetime for automatic coercion due to
|
||||||
|
// conflicting requirements
|
||||||
};
|
};
|
||||||
list_database(push_id);
|
list_database(push_id);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
// All 3 expressions should work in that the argument gets
|
||||||
|
// coerced to a trait object
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
send::<Box<Foo>>(box Output(0));
|
||||||
|
Test::<Box<Foo>>::foo(box Output(0));
|
||||||
|
Test::<Box<Foo>>.send(box Output(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn send<T>(_: T) {}
|
||||||
|
|
||||||
|
struct Test<T>;
|
||||||
|
impl<T> Test<T> {
|
||||||
|
fn foo(_: T) {}
|
||||||
|
fn send(&self, _: T) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Foo {}
|
||||||
|
struct Output(int);
|
||||||
|
impl Foo for Output {}
|
|
@ -13,9 +13,9 @@ use std::io::println;
|
||||||
pub fn main() {
|
pub fn main() {
|
||||||
let (tx, rx) = channel();
|
let (tx, rx) = channel();
|
||||||
|
|
||||||
|
tx.send("hello, world");
|
||||||
|
|
||||||
spawn(proc() {
|
spawn(proc() {
|
||||||
println(rx.recv());
|
println(rx.recv());
|
||||||
});
|
});
|
||||||
|
|
||||||
tx.send("hello, world");
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue