Skip to content

Commit cf4c3cb

Browse files
committed
Auto merge of #47416 - petrochenkov:remove-impl-for-dot-dot, r=petrochenkov
Remove `impl Foo for .. {}` in favor `auto trait Foo {}` Rebase of #46480 with restored parsing support.
2 parents e6072a7 + 2259877 commit cf4c3cb

File tree

85 files changed

+193
-804
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+193
-804
lines changed

Diff for: src/libcore/marker.rs

+3-17
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,10 @@ use hash::Hasher;
4040
/// [ub]: ../../reference/behavior-considered-undefined.html
4141
#[stable(feature = "rust1", since = "1.0.0")]
4242
#[rustc_on_unimplemented = "`{Self}` cannot be sent between threads safely"]
43-
pub unsafe trait Send {
43+
pub unsafe auto trait Send {
4444
// empty.
4545
}
4646

47-
#[stable(feature = "rust1", since = "1.0.0")]
48-
#[allow(unknown_lints)]
49-
#[allow(auto_impl)]
50-
unsafe impl Send for .. { }
51-
5247
#[stable(feature = "rust1", since = "1.0.0")]
5348
impl<T: ?Sized> !Send for *const T { }
5449
#[stable(feature = "rust1", since = "1.0.0")]
@@ -345,15 +340,10 @@ pub trait Copy : Clone {
345340
#[stable(feature = "rust1", since = "1.0.0")]
346341
#[lang = "sync"]
347342
#[rustc_on_unimplemented = "`{Self}` cannot be shared between threads safely"]
348-
pub unsafe trait Sync {
343+
pub unsafe auto trait Sync {
349344
// Empty
350345
}
351346

352-
#[stable(feature = "rust1", since = "1.0.0")]
353-
#[allow(unknown_lints)]
354-
#[allow(auto_impl)]
355-
unsafe impl Sync for .. { }
356-
357347
#[stable(feature = "rust1", since = "1.0.0")]
358348
impl<T: ?Sized> !Sync for *const T { }
359349
#[stable(feature = "rust1", since = "1.0.0")]
@@ -563,11 +553,7 @@ mod impls {
563553
/// This affects, for example, whether a `static` of that type is
564554
/// placed in read-only static memory or writable static memory.
565555
#[lang = "freeze"]
566-
unsafe trait Freeze {}
567-
568-
#[allow(unknown_lints)]
569-
#[allow(auto_impl)]
570-
unsafe impl Freeze for .. {}
556+
unsafe auto trait Freeze {}
571557

572558
impl<T: ?Sized> !Freeze for UnsafeCell<T> {}
573559
unsafe impl<T: ?Sized> Freeze for PhantomData<T> {}

Diff for: src/librustc/dep_graph/dep_node.rs

-1
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,6 @@ define_dep_nodes!( <'tcx>
496496
[] SuperPredicatesOfItem(DefId),
497497
[] TraitDefOfItem(DefId),
498498
[] AdtDefOfItem(DefId),
499-
[] IsAutoImpl(DefId),
500499
[] ImplTraitRef(DefId),
501500
[] ImplPolarity(DefId),
502501
[] FnSignature(DefId),

Diff for: src/librustc/hir/intravisit.rs

-4
Original file line numberDiff line numberDiff line change
@@ -498,10 +498,6 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item) {
498498
// visit_enum_def() takes care of visiting the Item's NodeId
499499
visitor.visit_enum_def(enum_definition, type_parameters, item.id, item.span)
500500
}
501-
ItemAutoImpl(_, ref trait_ref) => {
502-
visitor.visit_id(item.id);
503-
visitor.visit_trait_ref(trait_ref)
504-
}
505501
ItemImpl(.., ref type_parameters, ref opt_trait_reference, ref typ, ref impl_item_refs) => {
506502
visitor.visit_id(item.id);
507503
visitor.visit_generics(type_parameters);

Diff for: src/librustc/hir/lowering.rs

-10
Original file line numberDiff line numberDiff line change
@@ -1952,16 +1952,6 @@ impl<'a> LoweringContext<'a> {
19521952
let vdata = self.lower_variant_data(vdata);
19531953
hir::ItemUnion(vdata, self.lower_generics(generics))
19541954
}
1955-
ItemKind::AutoImpl(unsafety, ref trait_ref) => {
1956-
let trait_ref = self.lower_trait_ref(trait_ref, ImplTraitContext::Disallowed);
1957-
1958-
if let Def::Trait(def_id) = trait_ref.path.def {
1959-
self.trait_auto_impl.insert(def_id, id);
1960-
}
1961-
1962-
hir::ItemAutoImpl(self.lower_unsafety(unsafety),
1963-
trait_ref)
1964-
}
19651955
ItemKind::Impl(unsafety,
19661956
polarity,
19671957
defaultness,

Diff for: src/librustc/hir/map/def_collector.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,7 @@ impl<'a> visit::Visitor<'a> for DefCollector<'a> {
104104
// Pick the def data. This need not be unique, but the more
105105
// information we encapsulate into
106106
let def_data = match i.node {
107-
ItemKind::AutoImpl(..) | ItemKind::Impl(..) =>
108-
DefPathData::Impl,
107+
ItemKind::Impl(..) => DefPathData::Impl,
109108
ItemKind::Enum(..) | ItemKind::Struct(..) | ItemKind::Union(..) |
110109
ItemKind::Trait(..) | ItemKind::TraitAlias(..) |
111110
ItemKind::ExternCrate(..) | ItemKind::ForeignMod(..) | ItemKind::Ty(..) =>

Diff for: src/librustc/hir/map/mod.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1192,7 +1192,6 @@ fn node_id_to_string(map: &Map, id: NodeId, include_id: bool) -> String {
11921192
ItemTrait(..) => "trait",
11931193
ItemTraitAlias(..) => "trait alias",
11941194
ItemImpl(..) => "impl",
1195-
ItemAutoImpl(..) => "default impl",
11961195
};
11971196
format!("{} {}{}", item_str, path_str(), id_str)
11981197
}

Diff for: src/librustc/hir/mod.rs

+1-6
Original file line numberDiff line numberDiff line change
@@ -1965,10 +1965,6 @@ pub enum Item_ {
19651965
/// Represents a Trait Alias Declaration
19661966
ItemTraitAlias(Generics, TyParamBounds),
19671967

1968-
/// Auto trait implementations
1969-
///
1970-
/// `impl Trait for .. {}`
1971-
ItemAutoImpl(Unsafety, TraitRef),
19721968
/// An implementation, eg `impl<A> Trait for Foo { .. }`
19731969
ItemImpl(Unsafety,
19741970
ImplPolarity,
@@ -1996,8 +1992,7 @@ impl Item_ {
19961992
ItemUnion(..) => "union",
19971993
ItemTrait(..) => "trait",
19981994
ItemTraitAlias(..) => "trait alias",
1999-
ItemImpl(..) |
2000-
ItemAutoImpl(..) => "item",
1995+
ItemImpl(..) => "item",
20011996
}
20021997
}
20031998

Diff for: src/librustc/hir/print.rs

-12
Original file line numberDiff line numberDiff line change
@@ -652,18 +652,6 @@ impl<'a> State<'a> {
652652
self.head(&visibility_qualified(&item.vis, "union"))?;
653653
self.print_struct(struct_def, generics, item.name, item.span, true)?;
654654
}
655-
hir::ItemAutoImpl(unsafety, ref trait_ref) => {
656-
self.head("")?;
657-
self.print_visibility(&item.vis)?;
658-
self.print_unsafety(unsafety)?;
659-
self.word_nbsp("impl")?;
660-
self.print_trait_ref(trait_ref)?;
661-
self.s.space()?;
662-
self.word_space("for")?;
663-
self.word_space("..")?;
664-
self.bopen()?;
665-
self.bclose(item.span)?;
666-
}
667655
hir::ItemImpl(unsafety,
668656
polarity,
669657
defaultness,

Diff for: src/librustc/ich/impls_hir.rs

-1
Original file line numberDiff line numberDiff line change
@@ -854,7 +854,6 @@ impl_stable_hash_for!(enum hir::Item_ {
854854
ItemUnion(variant_data, generics),
855855
ItemTrait(is_auto, unsafety, generics, bounds, item_refs),
856856
ItemTraitAlias(generics, bounds),
857-
ItemAutoImpl(unsafety, trait_ref),
858857
ItemImpl(unsafety, impl_polarity, impl_defaultness, generics, trait_ref, ty, impl_item_refs)
859858
});
860859

Diff for: src/librustc/middle/dead.rs

-1
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,6 @@ impl<'a, 'tcx> Visitor<'tcx> for DeadVisitor<'a, 'tcx> {
564564
hir::ItemStruct(..) |
565565
hir::ItemUnion(..) |
566566
hir::ItemTrait(..) |
567-
hir::ItemAutoImpl(..) |
568567
hir::ItemImpl(..) => self.tcx.sess.codemap().def_span(item.span),
569568
_ => item.span,
570569
};

Diff for: src/librustc/middle/reachable.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -270,8 +270,7 @@ impl<'a, 'tcx> ReachableContext<'a, 'tcx> {
270270
hir::ItemMod(..) | hir::ItemForeignMod(..) |
271271
hir::ItemImpl(..) | hir::ItemTrait(..) | hir::ItemTraitAlias(..) |
272272
hir::ItemStruct(..) | hir::ItemEnum(..) |
273-
hir::ItemUnion(..) | hir::ItemAutoImpl(..) |
274-
hir::ItemGlobalAsm(..) => {}
273+
hir::ItemUnion(..) | hir::ItemGlobalAsm(..) => {}
275274
}
276275
}
277276
hir_map::NodeTraitItem(trait_method) => {

Diff for: src/librustc/middle/resolve_lifetime.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -461,10 +461,10 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
461461
intravisit::walk_item(this, item);
462462
});
463463
}
464+
464465
hir::ItemExternCrate(_)
465466
| hir::ItemUse(..)
466467
| hir::ItemMod(..)
467-
| hir::ItemAutoImpl(..)
468468
| hir::ItemForeignMod(..)
469469
| hir::ItemGlobalAsm(..) => {
470470
// These sorts of items have no lifetime parameters at all.

Diff for: src/librustc/traits/select.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2434,7 +2434,7 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> {
24342434
VtableBuiltinData { nested: obligations }
24352435
}
24362436

2437-
/// This handles the case where a `impl Foo for ..` impl is being used.
2437+
/// This handles the case where a `auto trait Foo` impl is being used.
24382438
/// The idea is that the impl applies to `X : Foo` if the following conditions are met:
24392439
///
24402440
/// 1. For each constituent type `Y` in `X`, `Y : Foo` holds
@@ -3276,7 +3276,7 @@ impl<'tcx> TraitObligation<'tcx> {
32763276
/*!
32773277
* Creates a cause for obligations that are derived from
32783278
* `obligation` by a recursive search (e.g., for a builtin
3279-
* bound, or eventually a `impl Foo for ..`). If `obligation`
3279+
* bound, or eventually a `auto trait Foo`). If `obligation`
32803280
* is itself a derived obligation, this is just a clone, but
32813281
* otherwise we create a "derived obligation" cause so as to
32823282
* keep track of the original root obligation for error

Diff for: src/librustc/ty/item_path.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,11 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
232232

233233
// Always use types for non-local impls, where types are always
234234
// available, and filename/line-number is mostly uninteresting.
235-
let use_types = !self.is_auto_impl(impl_def_id) && (!impl_def_id.is_local() || {
235+
let use_types = !impl_def_id.is_local() || {
236236
// Otherwise, use filename/line-number if forced.
237237
let force_no_types = FORCE_IMPL_FILENAME_LINE.with(|f| f.get());
238238
!force_no_types
239-
});
239+
};
240240

241241
if !use_types {
242242
return self.push_impl_path_fallback(buffer, impl_def_id);

Diff for: src/librustc/ty/maps/mod.rs

-3
Original file line numberDiff line numberDiff line change
@@ -112,9 +112,6 @@ define_maps! { <'tcx>
112112
/// True if this is a foreign item (i.e., linked via `extern { ... }`).
113113
[] fn is_foreign_item: IsForeignItem(DefId) -> bool,
114114

115-
/// True if this is an auto impl (aka impl Foo for ..)
116-
[] fn is_auto_impl: IsAutoImpl(DefId) -> bool,
117-
118115
/// Get a map with the variance of every item; use `item_variance`
119116
/// instead.
120117
[] fn crate_variances: crate_variances(CrateNum) -> Rc<ty::CrateVariancesMap>,

Diff for: src/librustc/ty/maps/plumbing.rs

-1
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,6 @@ pub fn force_from_dep_node<'a, 'gcx, 'lcx>(tcx: TyCtxt<'a, 'gcx, 'lcx>,
801801
DepKind::SuperPredicatesOfItem => { force!(super_predicates_of, def_id!()); }
802802
DepKind::TraitDefOfItem => { force!(trait_def, def_id!()); }
803803
DepKind::AdtDefOfItem => { force!(adt_def, def_id!()); }
804-
DepKind::IsAutoImpl => { force!(is_auto_impl, def_id!()); }
805804
DepKind::ImplTraitRef => { force!(impl_trait_ref, def_id!()); }
806805
DepKind::ImplPolarity => { force!(impl_polarity, def_id!()); }
807806
DepKind::FnSignature => { force!(fn_sig, def_id!()); }

Diff for: src/librustc/ty/mod.rs

-2
Original file line numberDiff line numberDiff line change
@@ -2400,8 +2400,6 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
24002400
}
24012401

24022402
/// Returns true if this is an `auto trait`.
2403-
///
2404-
/// NB. For a limited time, also returns true if `impl Trait for .. { }` is in the code-base.
24052403
pub fn trait_is_auto(self, trait_def_id: DefId) -> bool {
24062404
self.trait_def(trait_def_id).has_auto_impl
24072405
}

Diff for: src/librustc_driver/test.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,7 @@ impl<'a, 'gcx, 'tcx> Env<'a, 'gcx, 'tcx> {
246246
hir::ItemUnion(..) |
247247
hir::ItemTrait(..) |
248248
hir::ItemTraitAlias(..) |
249-
hir::ItemImpl(..) |
250-
hir::ItemAutoImpl(..) => None,
249+
hir::ItemImpl(..) => None,
251250

252251
hir::ItemMod(ref m) => search_mod(this, m, idx, names),
253252
};

Diff for: src/librustc_incremental/persist/dirty_clean.rs

-3
Original file line numberDiff line numberDiff line change
@@ -393,9 +393,6 @@ impl<'a, 'tcx> DirtyCleanVisitor<'a, 'tcx> {
393393
//
394394
//HirItem::ItemTrait(..) => ("ItemTrait", LABELS_TRAIT),
395395

396-
// `impl Trait for .. {}`
397-
HirItem::ItemAutoImpl(..) => ("ItemAutoImpl", LABELS_IMPL),
398-
399396
// An implementation, eg `impl<A> Trait for Foo { .. }`
400397
HirItem::ItemImpl(..) => ("ItemImpl", LABELS_IMPL),
401398

Diff for: src/librustc_lint/builtin.rs

-25
Original file line numberDiff line numberDiff line change
@@ -55,31 +55,6 @@ use bad_style::{MethodLateContext, method_context};
5555
// hardwired lints from librustc
5656
pub use lint::builtin::*;
5757

58-
declare_lint! {
59-
pub AUTO_IMPL,
60-
Deny,
61-
"The form `impl Foo for .. {}` will be removed, please use `auto trait Foo {}`"
62-
}
63-
64-
#[derive(Copy, Clone)]
65-
pub struct AutoImpl;
66-
67-
impl LintPass for AutoImpl {
68-
fn get_lints(&self) -> LintArray {
69-
lint_array!(AUTO_IMPL)
70-
}
71-
}
72-
73-
impl EarlyLintPass for AutoImpl {
74-
fn check_item(&mut self, cx: &EarlyContext, item: &ast::Item) {
75-
let msg = "The form `impl Foo for .. {}` will be removed, please use `auto trait Foo {}`";
76-
match item.node {
77-
ast::ItemKind::AutoImpl(..) => cx.span_lint(AUTO_IMPL, item.span, msg),
78-
_ => ()
79-
}
80-
}
81-
}
82-
8358
declare_lint! {
8459
WHILE_TRUE,
8560
Warn,

Diff for: src/librustc_lint/lib.rs

-5
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
109109
AnonymousParameters,
110110
IllegalFloatLiteralPattern,
111111
UnusedDocComment,
112-
AutoImpl,
113112
);
114113

115114
add_early_builtin_with_new!(sess,
@@ -183,10 +182,6 @@ pub fn register_builtins(store: &mut lint::LintStore, sess: Option<&Session>) {
183182
// - Eventually, remove lint
184183
store.register_future_incompatible(sess,
185184
vec![
186-
FutureIncompatibleInfo {
187-
id: LintId::of(AUTO_IMPL),
188-
reference: "issue #13231 <https://github.com/rust-lang/rust/issues/13231>",
189-
},
190185
FutureIncompatibleInfo {
191186
id: LintId::of(PRIVATE_IN_PUBLIC),
192187
reference: "issue #34537 <https://github.com/rust-lang/rust/issues/34537>",

Diff for: src/librustc_metadata/cstore_impl.rs

-1
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,6 @@ provide! { <'tcx> tcx, def_id, other, cdata,
143143
inherent_impls => { Rc::new(cdata.get_inherent_implementations_for_type(def_id.index)) }
144144
is_const_fn => { cdata.is_const_fn(def_id.index) }
145145
is_foreign_item => { cdata.is_foreign_item(def_id.index) }
146-
is_auto_impl => { cdata.is_auto_impl(def_id.index) }
147146
describe_def => { cdata.get_def(def_id.index) }
148147
def_span => { cdata.get_span(def_id.index, &tcx.sess) }
149148
lookup_stability => {

Diff for: src/librustc_metadata/decoder.rs

+1-10
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,6 @@ impl<'tcx> EntryKind<'tcx> {
404404

405405
EntryKind::ForeignMod |
406406
EntryKind::Impl(_) |
407-
EntryKind::AutoImpl(_) |
408407
EntryKind::Field |
409408
EntryKind::Generator(_) |
410409
EntryKind::Closure(_) => return None,
@@ -690,8 +689,7 @@ impl<'a, 'tcx> CrateMetadata {
690689
}
691690
continue;
692691
}
693-
EntryKind::Impl(_) |
694-
EntryKind::AutoImpl(_) => continue,
692+
EntryKind::Impl(_) => continue,
695693

696694
_ => {}
697695
}
@@ -1045,13 +1043,6 @@ impl<'a, 'tcx> CrateMetadata {
10451043
self.dllimport_foreign_items.contains(&id)
10461044
}
10471045

1048-
pub fn is_auto_impl(&self, impl_id: DefIndex) -> bool {
1049-
match self.entry(impl_id).kind {
1050-
EntryKind::AutoImpl(_) => true,
1051-
_ => false,
1052-
}
1053-
}
1054-
10551046
pub fn fn_sig(&self,
10561047
id: DefIndex,
10571048
tcx: TyCtxt<'a, 'tcx, 'tcx>)

Diff for: src/librustc_metadata/encoder.rs

-12
Original file line numberDiff line numberDiff line change
@@ -974,17 +974,6 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> {
974974
ctor_sig: None,
975975
}), repr_options)
976976
}
977-
hir::ItemAutoImpl(..) => {
978-
let data = ImplData {
979-
polarity: hir::ImplPolarity::Positive,
980-
defaultness: hir::Defaultness::Final,
981-
parent_impl: None,
982-
coerce_unsized_info: None,
983-
trait_ref: tcx.impl_trait_ref(def_id).map(|trait_ref| self.lazy(&trait_ref)),
984-
};
985-
986-
EntryKind::AutoImpl(self.lazy(&data))
987-
}
988977
hir::ItemImpl(_, polarity, defaultness, ..) => {
989978
let trait_ref = tcx.impl_trait_ref(def_id);
990979
let parent = if let Some(trait_ref) = trait_ref {
@@ -1579,7 +1568,6 @@ impl<'a, 'b, 'tcx> IndexBuilder<'a, 'b, 'tcx> {
15791568
hir::ItemGlobalAsm(..) |
15801569
hir::ItemExternCrate(..) |
15811570
hir::ItemUse(..) |
1582-
hir::ItemAutoImpl(..) |
15831571
hir::ItemTy(..) |
15841572
hir::ItemTraitAlias(..) => {
15851573
// no sub-item recording needed in these cases

Diff for: src/librustc_metadata/schema.rs

-2
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,6 @@ pub enum EntryKind<'tcx> {
303303
Generator(Lazy<GeneratorData<'tcx>>),
304304
Trait(Lazy<TraitData<'tcx>>),
305305
Impl(Lazy<ImplData<'tcx>>),
306-
AutoImpl(Lazy<ImplData<'tcx>>),
307306
Method(Lazy<MethodData<'tcx>>),
308307
AssociatedType(AssociatedContainer),
309308
AssociatedConst(AssociatedContainer, u8),
@@ -359,7 +358,6 @@ impl<'gcx> HashStable<StableHashingContext<'gcx>> for EntryKind<'gcx> {
359358
EntryKind::Trait(ref trait_data) => {
360359
trait_data.hash_stable(hcx, hasher);
361360
}
362-
EntryKind::AutoImpl(ref impl_data) |
363361
EntryKind::Impl(ref impl_data) => {
364362
impl_data.hash_stable(hcx, hasher);
365363
}

Diff for: src/librustc_mir/monomorphize/collector.rs

-1
Original file line numberDiff line numberDiff line change
@@ -910,7 +910,6 @@ impl<'b, 'a, 'v> ItemLikeVisitor<'v> for RootCollector<'b, 'a, 'v> {
910910
hir::ItemUse(..) |
911911
hir::ItemForeignMod(..) |
912912
hir::ItemTy(..) |
913-
hir::ItemAutoImpl(..) |
914913
hir::ItemTrait(..) |
915914
hir::ItemTraitAlias(..) |
916915
hir::ItemMod(..) => {

0 commit comments

Comments
 (0)