diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index a695a90f2ae..cda6b60b767 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -1016,7 +1016,7 @@ impl<'a> DumpHandler<'a> { } } - fn output_file(&self, ctx: &SaveContext<'_, '_>) -> File { + fn output_file(&self, ctx: &SaveContext<'_, '_>) -> (File, PathBuf) { let sess = &ctx.tcx.sess; let file_name = match ctx.config.output_file { Some(ref s) => PathBuf::from(s), @@ -1054,7 +1054,7 @@ impl<'a> DumpHandler<'a> { |e| sess.fatal(&format!("Could not open {}: {}", file_name.display(), e)), ); - output_file + (output_file, file_name) } } @@ -1066,13 +1066,23 @@ impl<'a> SaveHandler for DumpHandler<'a> { cratename: &str, input: &'l Input, ) { - let output = &mut self.output_file(&save_ctxt); - let mut dumper = JsonDumper::new(output, save_ctxt.config.clone()); - let mut visitor = DumpVisitor::new(save_ctxt, &mut dumper); + let sess = &save_ctxt.tcx.sess; + let file_name = { + let (mut output, file_name) = self.output_file(&save_ctxt); + let mut dumper = JsonDumper::new(&mut output, save_ctxt.config.clone()); + let mut visitor = DumpVisitor::new(save_ctxt, &mut dumper); - visitor.dump_crate_info(cratename, krate); - visitor.dump_compilation_options(input, cratename); - visit::walk_crate(&mut visitor, krate); + visitor.dump_crate_info(cratename, krate); + visitor.dump_compilation_options(input, cratename); + visit::walk_crate(&mut visitor, krate); + + file_name + }; + + if sess.opts.debugging_opts.emit_artifact_notifications { + sess.parse_sess.span_diagnostic + .emit_artifact_notification(&file_name, "save-analysis"); + } } } diff --git a/src/test/ui/save-analysis/emit-notifications.nll.stderr b/src/test/ui/save-analysis/emit-notifications.nll.stderr new file mode 100644 index 00000000000..60734cedb50 --- /dev/null +++ b/src/test/ui/save-analysis/emit-notifications.nll.stderr @@ -0,0 +1,2 @@ +{"artifact":"$TEST_BUILD_DIR/save-analysis/emit-notifications.nll/save-analysis/libemit_notifications.json","emit":"save-analysis"} +{"artifact":"$TEST_BUILD_DIR/save-analysis/emit-notifications.nll/libemit_notifications.rlib","emit":"link"} diff --git a/src/test/ui/save-analysis/emit-notifications.rs b/src/test/ui/save-analysis/emit-notifications.rs new file mode 100644 index 00000000000..411acbb14db --- /dev/null +++ b/src/test/ui/save-analysis/emit-notifications.rs @@ -0,0 +1,4 @@ +// compile-pass +// compile-flags: -Zsave-analysis -Zemit-artifact-notifications +// compile-flags: --crate-type rlib --error-format=json +pub fn foo() {} diff --git a/src/test/ui/save-analysis/emit-notifications.stderr b/src/test/ui/save-analysis/emit-notifications.stderr new file mode 100644 index 00000000000..e16f60f8b5f --- /dev/null +++ b/src/test/ui/save-analysis/emit-notifications.stderr @@ -0,0 +1,2 @@ +{"artifact":"$TEST_BUILD_DIR/save-analysis/emit-notifications/save-analysis/libemit_notifications.json","emit":"save-analysis"} +{"artifact":"$TEST_BUILD_DIR/save-analysis/emit-notifications/libemit_notifications.rlib","emit":"link"}