rust/tests
bors 333b920fee Auto merge of #109421 - mhammerly:extern-force-option, r=petrochenkov
Add `force` option for `--extern` flag

When `--extern force:foo=libfoo.so` is passed to `rustc` and `foo` is not actually used in the crate, ~inject an `extern crate foo;` statement into the AST~ force it to be resolved anyway in `CrateLoader::postprocess()`. This allows you to, for instance, inject a `#[panic_handler]` implementation into a `#![no_std]` crate without modifying its source so that it can be built as a `dylib`. It may also be useful for `#![panic_runtime]` or `#[global_allocator]`/`#![default_lib_allocator]` implementations.

My work previously involved integrating Rust into an existing C/C++ codebase which was built with Buck and shipped on, among other platforms, Android. When targeting Android, Buck builds all "native" code with shared linkage* so it can be loaded from Java/Kotlin. My project was not itself `#![no_std]`, but many of our dependencies were, and they would fail to build with shared linkage due to a lack of a panic handler. With this change, that project can add the new `force` option to the `std` dependency it already explicitly provides to every crate to solve this problem.

*This is an oversimplification - Buck has a couple features for aggregating dependencies into larger shared libraries, but none that I think sustainably solve this problem.

~The AST injection happens after macro expansion around where we similarly inject a test harness and proc-macro harness. The resolver's list of actually-used extern flags is populated during macro expansion, and if any of our `--extern` arguments have the `force` option and weren't already used, we inject an `extern crate` statement for them. The injection logic was added in `rustc_builtin_macros` as that's where similar injections for tests, proc-macros, and std/core already live.~

(New contributor - grateful for feedback and guidance!)
2023-05-06 11:24:37 +00:00
..
assembly Add loongarch64 asm! support 2023-04-25 14:15:31 +08:00
auxiliary
codegen assume the runtime range of align_offset 2023-05-05 04:22:51 -07:00
codegen-units Turn off inlining for codegen-unit tests 2023-04-07 15:46:45 -04:00
debuginfo Rollup merge of #108668 - gibbyfree:stabilizedebuggervisualizer, r=wesleywiser 2023-05-02 11:44:51 +05:30
incremental Add needs-unwind annotations to tests that need stack unwinding 2023-05-02 12:07:55 +00:00
mir-opt Rollup merge of #110773 - mj10021:issue-109502-fix, r=oli-obk 2023-05-05 18:40:34 +05:30
pretty Rollup merge of #111042 - Zalathar:no-coverage, r=wesleywiser 2023-05-01 17:10:24 +02:00
run-make Rollup merge of #109677 - dpaoliello:rawdylib, r=michaelwoerister,wesleywiser 2023-05-06 09:09:30 +09:00
run-make-fulldeps Restrict From<S> for {D,Subd}iagnosticMessage. 2023-05-03 08:44:39 +10:00
run-pass-valgrind
rustdoc Rollup merge of #110631 - notriddle:notriddle/impl-trait-cycle, r=GuillaumeGomez 2023-04-30 16:25:46 +02:00
rustdoc-gui Rollup merge of #110371 - notriddle:notriddle/search-corrections, r=GuillaumeGomez 2023-05-03 16:42:49 -07:00
rustdoc-js Rollup merge of #110780 - notriddle:notriddle/slice-index, r=GuillaumeGomez 2023-05-06 09:09:31 +09:00
rustdoc-js-std rustdoc-search: add support for nested generics 2023-04-14 14:55:45 -07:00
rustdoc-json Update tests 2023-04-29 13:01:46 +01:00
rustdoc-ui Improve check-cfg diagnostics (part 1) 2023-05-05 13:06:48 +02:00
ui Auto merge of #109421 - mhammerly:extern-force-option, r=petrochenkov 2023-05-06 11:24:37 +00:00
ui-fulldeps Move some Encodable/Decodable tests. 2023-05-02 12:02:32 +10:00
COMPILER_TESTS.md