summary refs log tree commit diff
path: root/compiler/rustc_driver/src/lib.rs
AgeCommit message (Collapse)AuthorLines
2022-01-06Rollup merge of #92504 - dtolnay:wall, r=jackh726Matthias Krüger-1/+1
Exit nonzero on rustc -Wall Previously `rustc -Wall /dev/null` would print a paragraph explaining that `-Wall` is not a thing in Rust, but would then exit 0. I believe exiting 0 is not the right behavior. For something like `rustc --version` or `rustc --help` or `rustc -C help` the user is requesting rustc to print some information; rustc prints that information and exits 0 because what the user requested has been accomplished. In the case of `rustc -Wall path/to/main.rs`, I don't find it correct to conceptualize this as "the user requested rustc to print information about the fact that Wall doesn't exist". The user requested a particular thing, and despite rustc knowing what they probably meant and informing them about that, the thing they requested has *not* been accomplished. Thus a nonzero exit code is needed.
2022-01-06Exit nonzero on rustc -WallDavid Tolnay-1/+1
2022-01-03Extract init_env_logger to crateDavid Tolnay-50/+7
2021-12-14fix clippy::single_char_pattern perf findingsMatthias Krüger-5/+5
2021-11-22add rustc option for using LLVM stack smash protectionBenjamin A. Bjørnseth-1/+6
LLVM has built-in heuristics for adding stack canaries to functions. These heuristics can be selected with LLVM function attributes. This patch adds a rustc option `-Z stack-protector={none,basic,strong,all}` which controls the use of these attributes. This gives rustc the same stack smash protection support as clang offers through options `-fno-stack-protector`, `-fstack-protector`, `-fstack-protector-strong`, and `-fstack-protector-all`. The protection this can offer is demonstrated in test/ui/abi/stack-protector.rs. This fills a gap in the current list of rustc exploit mitigations (https://doc.rust-lang.org/rustc/exploit-mitigations.html), originally discussed in #15179. Stack smash protection adds runtime overhead and is therefore still off by default, but now users have the option to trade performance for security as they see fit. An example use case is adding Rust code in an existing C/C++ code base compiled with stack smash protection. Without the ability to add stack smash protection to the Rust code, the code base artifacts could be exploitable in ways not possible if the code base remained pure C/C++. Stack smash protection support is present in LLVM for almost all the current tier 1/tier 2 targets: see test/assembly/stack-protector/stack-protector-target-support.rs. The one exception is nvptx64-nvidia-cuda. This patch follows clang's example, and adds a warning message printed if stack smash protection is used with this target (see test/ui/stack-protector/warn-stack-protector-unsupported.rs). Support for tier 3 targets has not been checked. Since the heuristics are applied at the LLVM level, the heuristics are expected to add stack smash protection to a fraction of functions comparable to C/C++. Some experiments demonstrating how Rust code is affected by the different heuristics can be found in test/assembly/stack-protector/stack-protector-heuristics-effect.rs. There is potential for better heuristics using Rust-specific safety information. For example it might be reasonable to skip stack smash protection in functions which transitively only use safe Rust code, or which uses only a subset of functions the user declares safe (such as anything under `std.*`). Such alternative heuristics could be added at a later point. LLVM also offers a "safestack" sanitizer as an alternative way to guard against stack smashing (see #26612). This could possibly also be included as a stack-protection heuristic. An alternative is to add it as a sanitizer (#39699). This is what clang does: safestack is exposed with option `-fsanitize=safe-stack`. The options are only supported by the LLVM backend, but as with other codegen options it is visible in the main codegen option help menu. The heuristic names "basic", "strong", and "all" are hopefully sufficiently generic to be usable in other backends as well. Reviewed-by: Nikita Popov <nikic@php.net> Extra commits during review: - [address-review] make the stack-protector option unstable - [address-review] reduce detail level of stack-protector option help text - [address-review] correct grammar in comment - [address-review] use compiler flag to avoid merging functions in test - [address-review] specify min LLVM version in fortanix stack-protector test Only for Fortanix test, since this target specifically requests the `--x86-experimental-lvi-inline-asm-hardening` flag. - [address-review] specify required LLVM components in stack-protector tests - move stack protector option enum closer to other similar option enums - rustc_interface/tests: sort debug option list in tracking hash test - add an explicit `none` stack-protector option Revert "set LLVM requirements for all stack protector support test revisions" This reverts commit a49b74f92a4e7d701d6f6cf63d207a8aff2e0f68.
2021-11-07Made temps-dir an unstable option.Tor Hovland-7/+0
2021-11-02Added the --temps-dir option.Tor Hovland-1/+11
2021-10-28Revert "Add rustc lint, warning when iterating over hashmaps"Mark Rousskov-2/+1
2021-10-15allow `potential_query_instability` everywherelcnr-1/+2
2021-10-10Fix RUSTC_LOG handlingMatthew Jasper-1/+1
Rustc was incorrectly reading the value of `RUSTC_LOG` as the environment vairable with the logging configuration, rather than the logging configuration itself.
2021-10-07Update compiler/rustc_driver/src/lib.rsEliza Weisman-1/+1
Co-authored-by: Joshua Nelson <github@jyn.dev>
2021-10-07rustc_driver: Enable the `WARN` log level by defaultEliza Weisman-8/+11
This commit changes the `tracing_subscriber` initialization in `rustc_driver` so that the `WARN` verbosity level is enabled by default when the `RUSTC_LOG` env variable is empty. If the `RUSTC_LOG` env variable is set, the filter string in the environment variable is honored, instead. Fixes #76824 Closes #89623 cc @eddyb, @oli-obk
2021-10-03Move rustc_middle::middle::cstore to rustc_session.Camille GILLOT-1/+1
2021-10-01Fix clippy lintsGuillaume Gomez-13/+13
2021-09-08Use Lrc instead of Option to avoid duplication of a SearchPathbjorn3-4/+1
2021-09-02Remove print_fuel_crate field of Sessionbjorn3-2/+2
2021-08-09Reduce verbosity of RUSTC_LOGjackh726-3/+0
2021-07-29Use strip_prefixbjorn3-7/+1
2021-07-28Fix typo in rustc_driver::versionbjorn3-1/+1
This caused rustc -Zcodegen-backend=foo.so -vV to look for oo.so instead of foo.so
2021-07-02Auto merge of #80182 - in42:stack_trace, r=tmandrybors-0/+50
Implement printing of stack traces on LLVM segfaults and aborts Implement #79153 Based on discussion, try to extend the rust_backtrace=1 feature to handle segfault or aborts in the llvm backend
2021-07-02Use signal handler only on supported platformsTyler Mandry-37/+42
2021-07-01Auto merge of #86757 - JohnTitor:rollup-acevhz7, r=JohnTitorbors-4/+13
Rollup of 8 pull requests Successful merges: - #85504 (the foundation owns rust trademarks) - #85520 (Fix typo and improve documentation for E0632) - #86680 (Improve error for missing -Z with debugging option) - #86728 (Check node kind to avoid ICE in `check_expr_return()`) - #86740 (copy rust-lld as ld in dist) - #86746 (Fix rustdoc query type filter) - #86750 (Test cross-crate usage of `feature(const_trait_impl)`) - #86755 (alloc: `RawVec<T, A>::shrink` can be in `no_global_oom_handling`.) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
2021-06-30Fix AST pretty.Camille GILLOT-2/+2
2021-06-30Move AST crate.Camille GILLOT-9/+2
2021-06-30Add suggestion for missing compile flag groupCameron Steffen-4/+13
2021-06-25Auto merge of #85640 - bjorn3:custom_ice_hook, r=jackh726bors-8/+11
Allow changing the bug report url for the ice hook cc https://github.com/bjorn3/rustc_codegen_cranelift/issues/1174
2021-06-22Teach rustc to accept lowercase error codesAris Merchant-2/+6
2021-06-16Small fixesTyler Mandry-11/+11
2021-06-16Implement printing of stack traces on LLVM segfaults and abortsVikram Pal-0/+45
2021-06-04Rustfmtbjorn3-1/+5
2021-06-04Support --version and -Cpasses=list for other codegen backendsbjorn3-4/+16
2021-06-04Allow printing the version of the default codegen backend if it isn't llvmbjorn3-7/+3
2021-06-04Turn a regular comment on Compilation into a doc commentbjorn3-1/+1
2021-05-24Don't invoke the default panic hook from report_icebjorn3-8/+11
2021-05-12Use () for analysis.Camille GILLOT-2/+1
2021-05-12Auto merge of #83610 - bjorn3:driver_cleanup, r=cjgillotbors-114/+86
rustc_driver cleanup Best reviewed one commit at a time.
2021-05-03Run save_analysis even when analysis returned an errorbjorn3-2/+2
2021-05-02Move queries.crate_name()bjorn3-3/+3
2021-05-02Simplify make_inputbjorn3-22/+21
2021-05-02Remove unnecessary argumentbjorn3-4/+1
2021-05-02Tiny cleanupbjorn3-3/+2
2021-05-02Inline process_rlink into try_process_rlinkbjorn3-20/+17
2021-05-02Document a few thingsbjorn3-2/+12
2021-05-02Remove dummy_configbjorn3-64/+38
2021-04-06Rollup merge of #83895 - eggyal:issue-83883, r=jyn514Dylan DPC-1/+2
Add listing of lints (eg via `-W help`) to rustdoc Fixes #83883 r? `@jyn514`
2021-04-06Add listing of lints (eg via -W help) to rustdocAlan Egerton-1/+2
2021-04-06Auto merge of #81641 - bjorn3:find_codegen_backend, r=davidtwcobors-2/+2
Find codegen backends in more locations * Search in the sysroot passed using `--sysroot` in addition to the default sysroot. * Search for `librustc_codegen_$name.so` in addition to `librustc_codegen_$name-$release.so`. This combined would allow putting `librustc_codegen_cranelift.so` in the right location of a sysroot passed using `--sysroot`.
2021-03-30Merge two consecutive tcx.analysis() callsbjorn3-11/+7
2021-03-27Address review commentsJoshua Nelson-4/+3
- Add back `HirIdVec`, with a comment that it will soon be used. - Add back `*_region` functions, with a comment they may soon be used. - Remove `-Z borrowck_stats` completely. It didn't do anything. - Remove `make_nop` completely. - Add back `current_loc`, which is used by an out-of-tree tool. - Fix style nits - Remove `AtomicCell` with `cfg(parallel_compiler)` for consistency.
2021-03-27Remove (lots of) dead codeJoshua Nelson-3/+7
Found with https://github.com/est31/warnalyzer. Dubious changes: - Is anyone else using rustc_apfloat? I feel weird completely deleting x87 support. - Maybe some of the dead code in rustc_data_structures, in case someone wants to use it in the future? - Don't change rustc_serialize I plan to scrap most of the json module in the near future (see https://github.com/rust-lang/compiler-team/issues/418) and fixing the tests needed more work than I expected. TODO: check if any of the comments on the deleted code should be kept.