mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-03 12:13:43 +00:00
Rollup merge of #48473 - GuillaumeGomez:rustdoc-auto-trait-impl-fix, r=QuietMisdreavus
Fix auto trait impl rustdoc ice Fixes #48463. r? @QuietMisdreavus
This commit is contained in:
commit
cbd0a2c6fd
@ -25,7 +25,7 @@ impl<'a, 'tcx, 'rcx> AutoTraitFinder<'a, 'tcx, 'rcx> {
|
||||
AdtKind::Struct => Def::Struct,
|
||||
AdtKind::Enum => Def::Enum,
|
||||
AdtKind::Union => Def::Union,
|
||||
},
|
||||
}
|
||||
_ => panic!("Unexpected type {:?}", def_id),
|
||||
};
|
||||
|
||||
|
@ -3428,7 +3428,11 @@ fn build_deref_target_impls(cx: &DocContext,
|
||||
let primitive = match *target {
|
||||
ResolvedPath { did, .. } if did.is_local() => continue,
|
||||
ResolvedPath { did, .. } => {
|
||||
ret.extend(inline::build_impls(cx, did, true));
|
||||
// We set the last parameter to false to avoid looking for auto-impls for traits
|
||||
// and therefore avoid an ICE.
|
||||
// The reason behind this is that auto-traits don't propagate through Deref so
|
||||
// we're not supposed to synthesise impls for them.
|
||||
ret.extend(inline::build_impls(cx, did, false));
|
||||
continue
|
||||
}
|
||||
_ => match target.primitive_type() {
|
||||
|
26
src/test/rustdoc/auto-impl-for-trait.rs
Normal file
26
src/test/rustdoc/auto-impl-for-trait.rs
Normal file
@ -0,0 +1,26 @@
|
||||
// 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.
|
||||
|
||||
// Test for https://github.com/rust-lang/rust/issues/48463 issue.
|
||||
|
||||
use std::any::Any;
|
||||
use std::ops::Deref;
|
||||
|
||||
pub struct AnyValue {
|
||||
val: Box<Any>,
|
||||
}
|
||||
|
||||
impl Deref for AnyValue {
|
||||
type Target = Any;
|
||||
|
||||
fn deref(&self) -> &Any {
|
||||
&*self.val
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user