@@ -69,6 +69,8 @@ pub fn encode_and_write_metadata(
69
69
let metadata_tmpdir = MaybeTempDir :: new ( metadata_tmpdir, tcx. sess . opts . cg . save_temps ) ;
70
70
let metadata_filename = metadata_tmpdir. as_ref ( ) . join ( METADATA_FILENAME ) ;
71
71
72
+ // Always create a file at `metadata_filename`, even if we have nothing to write to it.
73
+ // This simplifies the creation of the output `out_filename` when requested.
72
74
match metadata_kind {
73
75
MetadataKind :: None => {
74
76
std:: fs:: File :: create ( & metadata_filename) . unwrap_or_else ( |e| {
@@ -86,6 +88,9 @@ pub fn encode_and_write_metadata(
86
88
87
89
let _prof_timer = tcx. sess . prof . generic_activity ( "write_crate_metadata" ) ;
88
90
91
+ // If the user requests metadata as output, rename `metadata_filename`
92
+ // to the expected output `out_filename`. The match above should ensure
93
+ // this file always exists.
89
94
let need_metadata_file = tcx. sess . opts . output_types . contains_key ( & OutputType :: Metadata ) ;
90
95
let ( metadata_filename, metadata_tmpdir) = if need_metadata_file {
91
96
if let Err ( e) = non_durable_rename ( & metadata_filename, & out_filename) {
@@ -102,6 +107,7 @@ pub fn encode_and_write_metadata(
102
107
( metadata_filename, Some ( metadata_tmpdir) )
103
108
} ;
104
109
110
+ // Load metadata back to memory: codegen may need to include it in object files.
105
111
let metadata =
106
112
EncodedMetadata :: from_path ( metadata_filename, metadata_tmpdir) . unwrap_or_else ( |e| {
107
113
tcx. sess . fatal ( & format ! ( "failed to create encoded metadata from file: {}" , e) )
0 commit comments