Auto merge of #26910 - nrc:ice-lang-item, r=@huonw

This commit is contained in:
bors 2015-07-13 05:32:33 +00:00
commit c044791d80
4 changed files with 38 additions and 3 deletions

View file

@ -71,8 +71,10 @@ pub fn simplify_type(tcx: &ty::ctxt,
}
ty::TyBox(_) => {
// treat like we would treat `Box`
let def_id = tcx.lang_items.owned_box().unwrap();
Some(StructSimplifiedType(def_id))
match tcx.lang_items.require_owned_box() {
Ok(def_id) => Some(StructSimplifiedType(def_id)),
Err(msg) => tcx.sess.fatal(&msg),
}
}
ty::TyClosure(def_id, _) => {
Some(ClosureSimplifiedType(def_id))

View file

@ -90,6 +90,10 @@ impl LanguageItems {
}
}
pub fn require_owned_box(&self) -> Result<ast::DefId, String> {
self.require(OwnedBoxLangItem)
}
pub fn from_builtin_kind(&self, bound: ty::BuiltinBound)
-> Result<ast::DefId, String>
{

View file

@ -77,7 +77,10 @@ impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> {
self.check_def_id(item, data.principal_def_id());
}
ty::TyBox(..) => {
self.check_def_id(item, self.tcx.lang_items.owned_box().unwrap());
match self.tcx.lang_items.require_owned_box() {
Ok(trait_id) => self.check_def_id(item, trait_id),
Err(msg) => self.tcx.sess.span_fatal(item.span, &msg),
}
}
ty::TyChar => {
self.check_primitive_impl(def_id,

View file

@ -0,0 +1,26 @@
// 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.
// Test that we don't ICE when we are missing the owned_box lang item.
// error-pattern: requires `owned_box` lang_item
#![no_std]
#![feature(lang_items, no_std, box_syntax)]
extern crate core;
fn main() {
let x = box 1i32;
}
#[lang = "stack_exhausted"] extern fn stack_exhausted() {}
#[lang = "eh_personality"] extern fn eh_personality() {}
#[lang = "panic_fmt"] fn panic_fmt() -> ! { loop {} }