From b940f5088e725026820a9f9a47bdd40c01786233 Mon Sep 17 00:00:00 2001 From: yukang Date: Thu, 9 Feb 2023 09:11:25 +0000 Subject: [PATCH 1/2] fix #107822, handle properly when there is no crate attrs --- compiler/rustc_driver_impl/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_driver_impl/src/lib.rs b/compiler/rustc_driver_impl/src/lib.rs index a392d70f100a4..5e403d846e1ef 100644 --- a/compiler/rustc_driver_impl/src/lib.rs +++ b/compiler/rustc_driver_impl/src/lib.rs @@ -628,7 +628,7 @@ fn print_crate_info( println!("{}", serde_json::to_string_pretty(&sess.target.to_json()).unwrap()); } FileNames | CrateName => { - let attrs = attrs.as_ref().unwrap(); + let Some(attrs) = attrs.as_ref() else { return Compilation::Continue; }; let t_outputs = rustc_interface::util::build_output_filenames(attrs, sess); let id = rustc_session::output::find_crate_name(sess, attrs); if *req == PrintRequest::CrateName { From 257389882de113945d3f9f1abb9d0a431ca3cf92 Mon Sep 17 00:00:00 2001 From: yukang Date: Fri, 10 Feb 2023 08:01:50 +0000 Subject: [PATCH 2/2] add test for no input file --- compiler/rustc_driver_impl/src/lib.rs | 5 ++++- tests/run-make/no-input-file/Makefile | 4 ++++ tests/run-make/no-input-file/no-input-file.stderr | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 tests/run-make/no-input-file/Makefile create mode 100644 tests/run-make/no-input-file/no-input-file.stderr diff --git a/compiler/rustc_driver_impl/src/lib.rs b/compiler/rustc_driver_impl/src/lib.rs index 5e403d846e1ef..e5104e2d3f9d1 100644 --- a/compiler/rustc_driver_impl/src/lib.rs +++ b/compiler/rustc_driver_impl/src/lib.rs @@ -628,7 +628,10 @@ fn print_crate_info( println!("{}", serde_json::to_string_pretty(&sess.target.to_json()).unwrap()); } FileNames | CrateName => { - let Some(attrs) = attrs.as_ref() else { return Compilation::Continue; }; + let Some(attrs) = attrs.as_ref() else { + // no crate attributes, print out an error and exit + return Compilation::Continue; + }; let t_outputs = rustc_interface::util::build_output_filenames(attrs, sess); let id = rustc_session::output::find_crate_name(sess, attrs); if *req == PrintRequest::CrateName { diff --git a/tests/run-make/no-input-file/Makefile b/tests/run-make/no-input-file/Makefile new file mode 100644 index 0000000000000..2f02159229d3c --- /dev/null +++ b/tests/run-make/no-input-file/Makefile @@ -0,0 +1,4 @@ +include ../../run-make-fulldeps/tools.mk + +all: + $(RUSTC) --print crate-name 2>&1 | diff - no-input-file.stderr diff --git a/tests/run-make/no-input-file/no-input-file.stderr b/tests/run-make/no-input-file/no-input-file.stderr new file mode 100644 index 0000000000000..b843eb524f3d2 --- /dev/null +++ b/tests/run-make/no-input-file/no-input-file.stderr @@ -0,0 +1,2 @@ +error: no input filename given +