diff --git a/compiler/rustc_session/src/session.rs b/compiler/rustc_session/src/session.rs index f3ce78d2d78f8..86d495c3353b3 100644 --- a/compiler/rustc_session/src/session.rs +++ b/compiler/rustc_session/src/session.rs @@ -1,7 +1,7 @@ use crate::cgu_reuse_tracker::CguReuseTracker; use crate::code_stats::CodeStats; pub use crate::code_stats::{DataTypeKind, FieldInfo, SizeKind, VariantInfo}; -use crate::config::{self, CrateType, OutputType, PrintRequest, SwitchWithOptPath}; +use crate::config::{self, CrateType, OutputType, SwitchWithOptPath}; use crate::filesearch; use crate::lint::{self, LintId}; use crate::parse::ParseSess; @@ -1440,25 +1440,6 @@ fn validate_commandline_args_with_session_available(sess: &Session) { } } - // PGO does not work reliably with panic=unwind on Windows. Let's make it - // an error to combine the two for now. It always runs into an assertions - // if LLVM is built with assertions, but without assertions it sometimes - // does not crash and will probably generate a corrupted binary. - // We should only display this error if we're actually going to run PGO. - // If we're just supposed to print out some data, don't show the error (#61002). - if sess.opts.cg.profile_generate.enabled() - && sess.target.is_like_msvc - && sess.panic_strategy() == PanicStrategy::Unwind - && sess.opts.prints.iter().all(|&p| p == PrintRequest::NativeStaticLibs) - { - sess.err( - "Profile-guided optimization does not yet work in conjunction \ - with `-Cpanic=unwind` on Windows when targeting MSVC. \ - See issue #61002 \ - for more information.", - ); - } - // Sanitizers can only be used on platforms that we know have working sanitizer codegen. let supported_sanitizers = sess.target.options.supported_sanitizers; let unsupported_sanitizers = sess.opts.debugging_opts.sanitizer - supported_sanitizers; diff --git a/src/test/codegen/pgo-instrumentation.rs b/src/test/codegen/pgo-instrumentation.rs index c085f3c829ea4..05c2d2fc0d8c1 100644 --- a/src/test/codegen/pgo-instrumentation.rs +++ b/src/test/codegen/pgo-instrumentation.rs @@ -1,8 +1,7 @@ // Test that `-Cprofile-generate` creates expected instrumentation artifacts in LLVM IR. -// Compiling with `-Cpanic=abort` because PGO+unwinding isn't supported on all platforms. // needs-profiler-support -// compile-flags: -Cprofile-generate -Ccodegen-units=1 -Cpanic=abort +// compile-flags: -Cprofile-generate -Ccodegen-units=1 // CHECK: @__llvm_profile_raw_version = // CHECK-DAG: @__profc_{{.*}}pgo_instrumentation{{.*}}some_function{{.*}} = {{.*}}global diff --git a/src/test/run-make-fulldeps/pgo-branch-weights/Makefile b/src/test/run-make-fulldeps/pgo-branch-weights/Makefile index 18828b66ce874..9773e3f1fdfc4 100644 --- a/src/test/run-make-fulldeps/pgo-branch-weights/Makefile +++ b/src/test/run-make-fulldeps/pgo-branch-weights/Makefile @@ -6,19 +6,6 @@ -include ../tools.mk -# This test makes sure that instrumented binaries record the right counts for -# functions being called and branches being taken. We run an instrumented binary -# with an argument that causes a know path through the program and then check -# that the expected counts get added to the use-phase LLVM IR. - -# LLVM doesn't support instrumenting binaries that use SEH: -# https://github.com/rust-lang/rust/issues/61002 -# -# Things work fine with -Cpanic=abort though. -ifdef IS_MSVC -COMMON_FLAGS=-Cpanic=abort -endif - # For some very small programs GNU ld seems to not properly handle # instrumentation sections correctly. Neither Gold nor LLD have that problem. ifeq ($(UNAME),Linux) diff --git a/src/test/run-make-fulldeps/pgo-gen-lto/Makefile b/src/test/run-make-fulldeps/pgo-gen-lto/Makefile index f1ac39aa0ea8a..a7d5c56163257 100644 --- a/src/test/run-make-fulldeps/pgo-gen-lto/Makefile +++ b/src/test/run-make-fulldeps/pgo-gen-lto/Makefile @@ -8,14 +8,6 @@ COMPILE_FLAGS=-Copt-level=3 -Clto=fat -Cprofile-generate="$(TMPDIR)" -# LLVM doesn't yet support instrumenting binaries that use unwinding on MSVC: -# https://github.com/rust-lang/rust/issues/61002 -# -# Things work fine with -Cpanic=abort though. -ifdef IS_MSVC -COMPILE_FLAGS+= -Cpanic=abort -endif - all: $(RUSTC) $(COMPILE_FLAGS) test.rs $(call RUN,test) || exit 1 diff --git a/src/test/run-make-fulldeps/pgo-gen-no-imp-symbols/Makefile b/src/test/run-make-fulldeps/pgo-gen-no-imp-symbols/Makefile index 3fbfeb09eb373..425bfc28a9766 100644 --- a/src/test/run-make-fulldeps/pgo-gen-no-imp-symbols/Makefile +++ b/src/test/run-make-fulldeps/pgo-gen-no-imp-symbols/Makefile @@ -4,14 +4,6 @@ COMPILE_FLAGS=-O -Ccodegen-units=1 -Cprofile-generate="$(TMPDIR)" -# LLVM doesn't yet support instrumenting binaries that use unwinding on MSVC: -# https://github.com/rust-lang/rust/issues/61002 -# -# Things work fine with -Cpanic=abort though. -ifdef IS_MSVC -COMPILE_FLAGS+= -Cpanic=abort -endif - all: $(RUSTC) $(COMPILE_FLAGS) --emit=llvm-ir test.rs # We expect symbols starting with "__llvm_profile_". diff --git a/src/test/run-make-fulldeps/pgo-gen/Makefile b/src/test/run-make-fulldeps/pgo-gen/Makefile index 69b19801bf091..6533355be3418 100644 --- a/src/test/run-make-fulldeps/pgo-gen/Makefile +++ b/src/test/run-make-fulldeps/pgo-gen/Makefile @@ -8,14 +8,6 @@ COMPILE_FLAGS=-g -Cprofile-generate="$(TMPDIR)" -# LLVM doesn't yet support instrumenting binaries that use unwinding on MSVC: -# https://github.com/rust-lang/rust/issues/61002 -# -# Things work fine with -Cpanic=abort though. -ifdef IS_MSVC -COMPILE_FLAGS+= -Cpanic=abort -endif - all: $(RUSTC) $(COMPILE_FLAGS) test.rs $(call RUN,test) || exit 1 diff --git a/src/test/run-make-fulldeps/pgo-indirect-call-promotion/Makefile b/src/test/run-make-fulldeps/pgo-indirect-call-promotion/Makefile index 876a9b2c43991..c0195dcbb31be 100644 --- a/src/test/run-make-fulldeps/pgo-indirect-call-promotion/Makefile +++ b/src/test/run-make-fulldeps/pgo-indirect-call-promotion/Makefile @@ -6,20 +6,6 @@ -include ../tools.mk -# This test makes sure that indirect call promotion is performed. The test -# programs calls the same function a thousand times through a function pointer. -# Only PGO data provides the information that it actually always is the same -# function. We verify that the indirect call promotion pass inserts a check -# whether it can make a direct call instead of the indirect call. - -# LLVM doesn't support instrumenting binaries that use SEH: -# https://github.com/rust-lang/rust/issues/61002 -# -# Things work fine with -Cpanic=abort though. -ifdef IS_MSVC -COMMON_FLAGS=-Cpanic=abort -endif - all: # We don't compile `opaque` with either optimizations or instrumentation. # We don't compile `opaque` with either optimizations or instrumentation. diff --git a/src/test/run-make-fulldeps/pgo-use/Makefile b/src/test/run-make-fulldeps/pgo-use/Makefile index 01bc211df1616..d7863c9c587a5 100644 --- a/src/test/run-make-fulldeps/pgo-use/Makefile +++ b/src/test/run-make-fulldeps/pgo-use/Makefile @@ -18,14 +18,6 @@ COMMON_FLAGS=-Copt-level=2 -Ccodegen-units=1 -Cllvm-args=-disable-preinline -# LLVM doesn't support instrumenting binaries that use SEH: -# https://github.com/rust-lang/rust/issues/61002 -# -# Things work fine with -Cpanic=abort though. -ifdef IS_MSVC -COMMON_FLAGS+= -Cpanic=abort -endif - ifeq ($(UNAME),Darwin) # macOS does not have the `tac` command, but `tail -r` does the same thing TAC := tail -r