diff options
| author | bors <bors@rust-lang.org> | 2021-05-10 00:42:31 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-05-10 00:42:31 +0000 |
| commit | d29289c509c60c52b16277b0cce5abfc5cf06985 (patch) | |
| tree | 6a2acded658f23aa72493144a765bb951dce645f /compiler/rustc_middle/src/mir | |
| parent | c55c26cb36a988d5df8b9f4442dc8af93e687a39 (diff) | |
| parent | 89a67051a76f8511372d7b9f14610474b1dba6aa (diff) | |
| download | rust-d29289c509c60c52b16277b0cce5abfc5cf06985.tar.gz rust-d29289c509c60c52b16277b0cce5abfc5cf06985.zip | |
Auto merge of #84507 - crlf0710:codegen_nonlocal_main_wrapper, r=nagisa
Add primary marker on codegen unit and generate main wrapper on primary codegen. This is the codegen part of changes extracted from #84062. This add a marker called `primary` on each codegen units, where exactly one codegen unit will be `primary = true` at a time. This specific codegen unit will take charge of generating `main` wrapper when `main` is imported from a foreign crate after the implementation of RFC 1260. cc #28937 I'm not sure who should i ask for review for codegen changes, so feel free to reassign. r? `@nagisa`
Diffstat (limited to 'compiler/rustc_middle/src/mir')
| -rw-r--r-- | compiler/rustc_middle/src/mir/mono.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/compiler/rustc_middle/src/mir/mono.rs b/compiler/rustc_middle/src/mir/mono.rs index 77f38e52ad2..67440e6e0ed 100644 --- a/compiler/rustc_middle/src/mir/mono.rs +++ b/compiler/rustc_middle/src/mir/mono.rs @@ -229,6 +229,7 @@ pub struct CodegenUnit<'tcx> { name: Symbol, items: FxHashMap<MonoItem<'tcx>, (Linkage, Visibility)>, size_estimate: Option<usize>, + primary: bool, } /// Specifies the linkage type for a `MonoItem`. @@ -258,7 +259,7 @@ pub enum Visibility { impl<'tcx> CodegenUnit<'tcx> { pub fn new(name: Symbol) -> CodegenUnit<'tcx> { - CodegenUnit { name, items: Default::default(), size_estimate: None } + CodegenUnit { name, items: Default::default(), size_estimate: None, primary: false } } pub fn name(&self) -> Symbol { @@ -269,6 +270,14 @@ impl<'tcx> CodegenUnit<'tcx> { self.name = name; } + pub fn is_primary(&self) -> bool { + self.primary + } + + pub fn make_primary(&mut self) { + self.primary = true; + } + pub fn items(&self) -> &FxHashMap<MonoItem<'tcx>, (Linkage, Visibility)> { &self.items } @@ -378,6 +387,7 @@ impl<'a, 'tcx> HashStable<StableHashingContext<'a>> for CodegenUnit<'tcx> { name, // The size estimate is not relevant to the hash size_estimate: _, + primary: _, } = *self; name.hash_stable(hcx, hasher); |
