rustc_trans: keep LLVM types for trait objects anonymous.
This commit is contained in:
parent
90eb44a589
commit
973756d715
@ -57,7 +57,9 @@ fn uncached_llvm_type<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
|
||||
ty::TyClosure(..) |
|
||||
ty::TyGenerator(..) |
|
||||
ty::TyAdt(..) |
|
||||
ty::TyDynamic(..) |
|
||||
// FIXME(eddyb) producing readable type names for trait objects can result
|
||||
// in problematically distinct types due to HRTB and subtyping (see #47638).
|
||||
// ty::TyDynamic(..) |
|
||||
ty::TyForeign(..) |
|
||||
ty::TyStr => {
|
||||
let mut name = String::with_capacity(32);
|
||||
|
@ -122,13 +122,13 @@ pub fn unsafe_slice(_: &[UnsafeInner]) {
|
||||
pub fn str(_: &[u8]) {
|
||||
}
|
||||
|
||||
// CHECK: @trait_borrow(%"core::ops::drop::Drop"* nonnull %arg0.0, {}* noalias nonnull readonly %arg0.1)
|
||||
// CHECK: @trait_borrow({}* nonnull %arg0.0, {}* noalias nonnull readonly %arg0.1)
|
||||
// FIXME #25759 This should also have `nocapture`
|
||||
#[no_mangle]
|
||||
pub fn trait_borrow(_: &Drop) {
|
||||
}
|
||||
|
||||
// CHECK: @trait_box(%"core::ops::drop::Drop"* noalias nonnull, {}* noalias nonnull readonly)
|
||||
// CHECK: @trait_box({}* noalias nonnull, {}* noalias nonnull readonly)
|
||||
#[no_mangle]
|
||||
pub fn trait_box(_: Box<Drop>) {
|
||||
}
|
||||
|
18
src/test/run-pass/issue-47638.rs
Normal file
18
src/test/run-pass/issue-47638.rs
Normal file
@ -0,0 +1,18 @@
|
||||
// Copyright 2018 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.
|
||||
|
||||
fn id<'c, 'b>(f: &'c &'b Fn(&i32)) -> &'c &'b Fn(&'static i32) {
|
||||
f
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let f: &Fn(&i32) = &|x| {};
|
||||
id(&f);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user