Commit graph

429 commits

Author SHA1 Message Date
Vadim Petrochenkov
69b2179afe Print accessed env vars as special comments into depinfo files 2020-05-31 12:00:46 +03:00
Ralf Jung
278e26eaf6
Rollup merge of #72669 - petrochenkov:smclean, r=Mark-Simulacrum
rustc_session: Cleanup session creation

Noticed while reviewing https://github.com/rust-lang/rust/pull/72618.
2020-05-30 23:08:55 +02:00
Ralf Jung
ffe329250b
Rollup merge of #72666 - ivanloz:profile_emit_flag, r=matthewjasper
Add -Z profile-emit=<path> for Gcov gcda output.

Adds a -Z flag to control the file path that the Gcov gcda output is
written to during runtime. This flag expects a path and filename, e.g.
-Z profile-emit=gcov/out/lib.gcda.

This works similar to GCC/Clang's -fprofile-dir flag which allows
control over the output path for gcda coverage files.
2020-05-30 23:08:51 +02:00
Bastian Kauschke
49b1b4c438 more LocalDefIds 2020-05-30 12:22:29 +02:00
Vadim Petrochenkov
5369f4aa57 rustc_session: Cleanup session creation 2020-05-27 22:32:24 +03:00
Ivan Lozano
0c1ef853bb Add -Z profile-emit=<path> for Gcov gcda output.
Adds a -Z flag to control the file path that the Gcov gcda output is
written to during runtime. This flag expects a path and filename, e.g.
-Z profile-emit=gcov/out/lib.gcda.

This works similar to GCC/Clang's -fprofile-dir flag which allows
control over the output path for gcda coverage files.
2020-05-27 14:10:40 -04:00
Jonas Schievink
e04318e0fa Add a small MIR validation pass 2020-05-25 21:44:36 +02:00
Aaron Hill
14382c6437
Collect tokens for ast::Expr 2020-05-24 15:54:48 -04:00
Dylan MacKenzie
c282c1c654 Use OnceCell instead of Once 2020-05-22 13:31:02 -07:00
Vadim Petrochenkov
8dbe4d9ba4 Eliminate some Option<NativeLibKind>s 2020-05-20 21:57:16 +03:00
Vadim Petrochenkov
ee7a35ab95 Rename some types describing native libraries
NativeLibrary(Kind) -> NativeLib(Kind)
NativeStatic -> StaticBundle
NativeStaticNobundle -> StaticNoBundle
NativeFramework -> Framework
NativeRawDylib -> RawDylib
NativeUnknown -> Unspecified
2020-05-20 21:53:19 +03:00
Amanieu d'Antras
ec1ad61f88 Implement AST lowering for asm! 2020-05-18 14:41:29 +01:00
Vadim Petrochenkov
55a94bdc38 rustc_target: Stop using "string typing" for code models
Introduce `enum CodeModel` instead.
2020-05-16 12:02:11 +03:00
Matthias Krüger
8bfd84539e Fix clippy warnings
Fixes clippy::{cone_on_copy, filter_next, redundant_closure, single_char_pattern, len_zero,redundant_field_names, useless_format, identity_conversion, map_clone, into_iter_on_ref, needless_return, option_as_ref_deref, unused_unit, unnecessary_mut_passed}
2020-05-11 17:13:32 +02:00
bors
aeb473803d Auto merge of #71825 - contrun:cg-option-strip, r=petrochenkov
add codegen option strip

closes https://github.com/rust-lang/rust/issues/71757

I don't know if the flags added here works for all linkers. I only tested on my Linux pc. I also don't know what is the best for emlinker, PtxLinker, MsvcLinker. The option for WasmLd is copied from https://aransentin.github.io/cwasm/.
2020-05-10 20:48:40 +00:00
YI
a6c2f73b6e add linking option strip
move strip option to "Z"

add more strip options, remove strip-debuginfo-if-disabled

merge strip and debuginfo
2020-05-10 16:44:46 +08:00
bors
8d16eeb8c9 Auto merge of #71775 - petrochenkov:crtcfg, r=matthewjasper
Enable `cfg` predicate for `target_feature = "crt-static"` only if the target supports it

That's what all other `target_feature`s do.
2020-05-10 08:25:32 +00:00
Ralf Jung
ce05553c62
Rollup merge of #71234 - maurer:init-array, r=cuviper
rustllvm: Use .init_array rather than .ctors

LLVM TargetMachines default to using the (now-legacy) .ctors
representation of init functions. Mixing .ctors and .init_array
representations can cause issues when linking with lld.

This happens in practice for:

* Our profiling runtime which is currently implicitly built with
  .init_array since it is built by clang, which sets this field.
* External C/C++ code that may be linked into the same process.

Fixes: #71233
2020-05-09 13:36:32 +02:00
Jack Huey
a24df5b3cd Reintegrate chalk using chalk-solve 2020-05-07 17:35:58 -04:00
bors
97f3eeec82 Auto merge of #55617 - oli-obk:stacker, r=nagisa,oli-obk
Prevent compiler stack overflow for deeply recursive code

I was unable to write a test that

1. runs in under 1s
2. overflows on my machine without this patch

The following reproduces the issue, but I don't think it's sensible to include a test that takes 30s to compile. We can now easily squash newly appearing overflows by the strategic insertion of calls to `ensure_sufficient_stack`.

```rust
// compile-pass

#![recursion_limit="1000000"]

macro_rules! chain {
    (EE $e:expr) => {$e.sin()};
    (RECURSE $i:ident $e:expr) => {chain!($i chain!($i chain!($i chain!($i $e))))};
    (Z $e:expr) => {chain!(RECURSE EE $e)};
    (Y $e:expr) => {chain!(RECURSE Z $e)};
    (X $e:expr) => {chain!(RECURSE Y $e)};
    (A $e:expr) => {chain!(RECURSE X $e)};
    (B $e:expr) => {chain!(RECURSE A $e)};
    (C $e:expr) => {chain!(RECURSE B $e)};
    // causes overflow on x86_64 linux
    // less than 1 second until overflow on test machine
    // after overflow has been fixed, takes 30s to compile :/
    (D $e:expr) => {chain!(RECURSE C $e)};
    (E $e:expr) => {chain!(RECURSE D $e)};
    (F $e:expr) => {chain!(RECURSE E $e)};
    // more than 10 seconds
    (G $e:expr) => {chain!(RECURSE F $e)};
    (H $e:expr) => {chain!(RECURSE G $e)};
    (I $e:expr) => {chain!(RECURSE H $e)};
    (J $e:expr) => {chain!(RECURSE I $e)};
    (K $e:expr) => {chain!(RECURSE J $e)};
    (L $e:expr) => {chain!(RECURSE L $e)};
}

fn main() {
    let x = chain!(D 42.0_f32);
}
```

fixes #55471
fixes #41884
fixes #40161
fixes #34844
fixes #32594

cc @alexcrichton @rust-lang/compiler

I looked at all code that checks the recursion limit and inserted stack growth calls where appropriate.
2020-05-07 00:03:23 +00:00
Dylan DPC
14d608f1d8
Rollup merge of #71269 - Mark-Simulacrum:sat-float-casts, r=nikic
Define UB in float-to-int casts to saturate

This closes #10184 by defining the behavior there to saturate infinities and values exceeding the integral range (on the lower or upper end). `NaN` is sent to zero.
2020-05-06 16:58:50 +02:00
Mark Rousskov
9907ad6ed9 Define UB in float-to-int casts to saturate
- Round to zero, and representable values cast directly.
- `NaN` goes to 0
- Values beyond the limits of the type are saturated to the "nearest value"
  (essentially rounding to zero, in some sense) in the integral type, so e.g.
  `f32::INFINITY` would go to `{u,i}N::MAX.`
2020-05-06 08:14:21 -04:00
Dylan DPC
12fc1e0fa5
Rollup merge of #69984 - lenary:lenary/force-uwtables, r=hanna-kruppe
Add Option to Force Unwind Tables

When panic != unwind, `nounwind` is added to all functions for a target.
This can cause issues when a panic happens with RUST_BACKTRACE=1, as
there needs to be a way to reconstruct the backtrace. There are three
possible sources of this information: forcing frame pointers (for which
an option exists already), debug info (for which an option exists), or
unwind tables.

Especially for embedded devices, forcing frame pointers can have code
size overheads (RISC-V sees ~10% overheads, ARM sees ~2-3% overheads).
In production code, it can be the case that debug info is not kept, so it is useful
to provide this third option, unwind tables, that users can use to
reconstruct the call stack. Reconstructing this stack is harder than
with frame pointers, but it is still possible.

---

This came up in discussion on #69890, and turned out to be a fairly simple addition.

r? @hanna-kruppe
2020-05-05 12:55:08 +02:00
Sam Elliott
cda994633e Add Option to Force Unwind Tables
When panic != unwind, `nounwind` is added to all functions for a target.
This can cause issues when a panic happens with RUST_BACKTRACE=1, as
there needs to be a way to reconstruct the backtrace. There are three
possible sources of this information: forcing frame pointers (for which
an option exists already), debug info (for which an option exists), or
unwind tables.

Especially for embedded devices, forcing frame pointers can have code
size overheads (RISC-V sees ~10% overheads, ARM sees ~2-3% overheads).
In code, it can be the case that debug info is not kept, so it is useful
to provide this third option, unwind tables, that users can use to
reconstruct the call stack. Reconstructing this stack is harder than
with frame pointers, but it is still possible.

This commit adds a compiler option which allows a user to force the
addition of unwind tables. Unwind tables cannot be disabled on targets
that require them for correctness, or when using `-C panic=unwind`.
2020-05-04 12:08:35 +01:00
bors
a0c61a9044 Auto merge of #71631 - RalfJung:miri-unleash-the-gates, r=oli-obk
Miri: unleash all feature gates

IMO it is silly to unleash features that do not even have a feature gate yet, but not unleash features that do. The only thing this achieves is making unleashed mode annoying to use as we have to figure out the feature flags to enable (and not always do the error messages say what that flag is).

Given that the point of `-Z unleash-the-miri-inside-of-you` is to debug the Miri internals, I see no good reason for this extra hurdle. I cannot imagine a situation where we'd use that flag, realize the program also requires some feature gate, and then be like "oh I guess if this feature is unstable I will do something else". Instead, we'll always just add that flag to the code as well, so requiring the flag achieves nothing.

r? @oli-obk @ecstatic-morse
Fixes https://github.com/rust-lang/rust/issues/71630
2020-05-03 22:54:55 +00:00
Vadim Petrochenkov
33b6631d9b Enable cfg predicate for target_feature = "crt-static" only if the target supports it 2020-05-03 10:31:33 +03:00
Simonas Kazlauskas
968f442c7c Set the default stack size to 8MB
This was the value used before we originally started raising the stack
size to infinity.
2020-05-02 16:38:01 +02:00
Oliver Scherer
26edcee093 Prevent stack overflow for deeply recursive code 2020-05-02 16:37:57 +02:00
Ralf Jung
89666ab6b4 fix miri-unleash delayed sanity checking 2020-05-02 14:39:19 +02:00
Vadim Petrochenkov
ff86a45820 cleanup: config::CrateType -> CrateType 2020-05-02 11:57:23 +03:00
bors
dae90c1959 Auto merge of #71716 - alexcrichton:bitcode-follow-up, r=nnethercote
Rename `bitcode-in-rlib` option to `embed-bitcode`

This commit finishes work first pioneered in #70458 and started in #71528.
The `-C bitcode-in-rlib` option, which has not yet reached stable, is
renamed to `-C embed-bitcode` since that more accurately reflects what
it does now anyway. Various tests and such are updated along the way as
well.

This'll also need to be backported to the beta channel to ensure we
don't accidentally stabilize `-Cbitcode-in-rlib` as well.
2020-05-02 03:39:04 +00:00
Jack Huey
ef0da3ba4e Remove leftover chalk types 2020-05-01 14:39:05 -04:00
Alex Crichton
e1832fa4e4 Rename bitcode-in-rlib option to embed-bitcode
This commit finishes work first pioneered in #70458 and started in #71528.
The `-C bitcode-in-rlib` option, which has not yet reached stable, is
renamed to `-C embed-bitcode` since that more accurately reflects what
it does now anyway. Various tests and such are updated along the way as
well.

This'll also need to be backported to the beta channel to ensure we
don't accidentally stabilize `-Cbitcode-in-rlib` as well.
2020-05-01 09:05:13 -07:00
Matthew Maurer
0e7d5be4b8 Use .init_array rather than .ctors
LLVM TargetMachines default to using the (now-legacy) .ctors
representation of init functions. Mixing .ctors and .init_array
representations can cause issues when linking with lld.

This happens in practice for:

* Our profiling runtime which is currently implicitly built with
  .init_array since it is built by clang, which sets this field.
* External C/C++ code that may be linked into the same process.

To support legacy systems which may use .ctors, targets may now specify
that they use .ctors via the use_ctors attribute which defaults to
false.

For debugging and manual control, -Z use-ctors-section=yes/no will allow
manual override.

Fixes: #71233
2020-04-29 13:38:59 -07:00
Amanieu d'Antras
2f5bd9d0f1 Remove -Z no-landing-pads flag 2020-04-29 01:05:55 +01:00
bors
fb5615a477 Auto merge of #71292 - marmeladema:queries-local-def-id, r=eddyb
Convert more queries to use `LocalDefId`

This PR is based on commits in https://github.com/rust-lang/rust/pull/71215 and should partially solve #70853
2020-04-28 05:01:27 +00:00
marmeladema
c9f6ffc3b0 Change return type of entry_fn query to return a LocalDefId 2020-04-27 23:58:11 +01:00
marmeladema
6e930f72d0 Accept LocalDefId as key for mir_borrowck query 2020-04-27 21:50:18 +01:00
Dylan DPC
f81a41a86a
Rollup merge of #71558 - petrochenkov:tlsm, r=Amanieu
Cleanup and document `-Z tls-model`

r? @Amanieu
2020-04-27 22:15:04 +02:00
Vadim Petrochenkov
feeb75e263 rustc_target: Stop using "string typing" for TLS models
Introduce `enum TlsModel` instead.
2020-04-26 23:36:00 +03:00
Dylan DPC
4199ef14d7
Rollup merge of #71537 - Mark-Simulacrum:no-self-open, r=davidtwco
Remove support for self-opening

This was only used for linkage test cases, which is already covered by
the [run-make-fulldeps/symbol-visibility test](https://github.com/rust-lang/rust/blob/master/src/test/run-make-fulldeps/symbol-visibility/Makefile) -- which fairly extensively makes
sure we're correctly exporting the right symbols at the right visibility (for
various Rust crate types).

This fixes #10379 and resolves #10356 by removing the test case (and underlying support in the compiler). AFAICT, the better way to test visibility is via nm, like the symbol visibility test. It seems like that's sufficient; I suspect that given that we don't use this we should just drop it (android is tier 2 anyway). But happy to hear otherwise.
2020-04-26 21:02:35 +02:00
Dylan DPC
3b3f7bd020
Rollup merge of #71562 - matthiaskrgr:cl7ppy, r=Dylan-DPC
fix more clippy warnings

clippy::{redundant_pattern_matching, clone_on_copy, iter_cloned_collect, option_as_ref_deref, match_ref_pats}

r? @Dylan-DPC
2020-04-26 13:42:31 +02:00
Vadim Petrochenkov
fb91e5ed2f rustc_target: Stop using "string typing" for relocation models
Introduce `enum RelocModel` instead.
2020-04-26 11:18:47 +03:00
Matthias Krüger
8862f829bb fix more clippy warnings
clippy::{redundant_pattern_matching, clone_on_copy, iter_cloned_collect, option_as_ref_deref, match_ref_pats}
2020-04-26 02:24:01 +02:00
Dylan DPC
f70c9dba22
Rollup merge of #71554 - gizmondo:68922, r=jonas-schievink
Replace thread_local with generator resume arguments in box_region.

Fixes #68922.

Continuation of #70622. Added a short doc, hope it makes sense.

r? @jonas-schievink
2020-04-26 01:00:20 +02:00
Alex Aktsipetrov
357f4ce431 Replace thread_local with generator resume arguments in box_region. 2020-04-25 18:19:27 +02:00
Mark Rousskov
97983af76a Remove support for self-opening
This was only used for linkage test cases, which is already covered by
the run-make-fulldeps/symbol-visibility test -- which fairly extensively makes
sure we're correctly exporting the right symbols at the right visibility (for
various Rust crate types).
2020-04-25 10:55:20 -04:00
Josh Stone
4282776b1c Replace filter_map().next() calls with find_map()
These are semantically the same, but `find_map()` is more concise.
2020-04-24 20:03:45 -07:00
marmeladema
92fb59d7f3 librustc_middle: return LocalDefId instead of DefId in local_def_id 2020-04-23 23:14:07 +01:00
Nicholas Nethercote
6e7ba26bbd Use macros for option tests. 2020-04-22 22:47:05 +10:00