diff options
| author | David Wood <david@davidtw.co> | 2020-08-04 10:27:35 +0100 |
|---|---|---|
| committer | David Wood <david@davidtw.co> | 2020-08-16 15:42:20 +0100 |
| commit | 764dc3dc2f8a2a421fa9d9c6144ad75310a26b99 (patch) | |
| tree | 33c52d52a4c60664b27f429b7baff690d8fa3e79 /src | |
| parent | 97ba0c7171c4d2d9b899a2bd8e40a8974c47b86d (diff) | |
| download | rust-764dc3dc2f8a2a421fa9d9c6144ad75310a26b99.tar.gz rust-764dc3dc2f8a2a421fa9d9c6144ad75310a26b99.zip | |
lang_items: add support for lang items on variants
This commit adds support for lang items (`#[lang = "..."]` attributes) on enum variants. Signed-off-by: David Wood <david@davidtw.co>
Diffstat (limited to 'src')
| -rw-r--r-- | src/librustc_hir/target.rs | 2 | ||||
| -rw-r--r-- | src/librustc_passes/lang_items.rs | 8 |
2 files changed, 9 insertions, 1 deletions
diff --git a/src/librustc_hir/target.rs b/src/librustc_hir/target.rs index 3a4485a1b17..1efc8bc3124 100644 --- a/src/librustc_hir/target.rs +++ b/src/librustc_hir/target.rs @@ -29,6 +29,7 @@ pub enum Target { TyAlias, OpaqueTy, Enum, + Variant, Struct, Union, Trait, @@ -62,6 +63,7 @@ impl Display for Target { Target::TyAlias => "type alias", Target::OpaqueTy => "opaque type", Target::Enum => "enum", + Target::Variant => "enum variant", Target::Struct => "struct", Target::Union => "union", Target::Trait => "trait", diff --git a/src/librustc_passes/lang_items.rs b/src/librustc_passes/lang_items.rs index 07415870549..9ec47d2d9ab 100644 --- a/src/librustc_passes/lang_items.rs +++ b/src/librustc_passes/lang_items.rs @@ -30,7 +30,13 @@ struct LanguageItemCollector<'tcx> { impl ItemLikeVisitor<'v> for LanguageItemCollector<'tcx> { fn visit_item(&mut self, item: &hir::Item<'_>) { - self.check_for_lang(Target::from_item(item), item.hir_id, item.attrs) + self.check_for_lang(Target::from_item(item), item.hir_id, item.attrs); + + if let hir::ItemKind::Enum(def, ..) = &item.kind { + for variant in def.variants { + self.check_for_lang(Target::Variant, variant.id, variant.attrs); + } + } } fn visit_trait_item(&mut self, trait_item: &hir::TraitItem<'_>) { |
