Commit Graph

124099 Commits

Author SHA1 Message Date
Manish Goregaokar
8909ac97d5
Rollup merge of #74606 - cuviper:cloexec, r=sfackler
Remove Linux workarounds for missing CLOEXEC support

Now that #74163 updated the minimum Linux kernel to 2.6.32, we can
assume the availability of APIs that open file descriptors that are
already set to close on exec, including the flags `O_CLOEXEC`,
`SOCK_CLOEXEC`, and `F_DUPFD_CLOEXEC`.

Closes #74519.
2020-07-23 00:42:14 -07:00
Manish Goregaokar
bea2eedcb5
Rollup merge of #74587 - lzutao:consts, r=dtolnay
Prefer constant over function

Just that I prefer constants over functions that can be made const.
2020-07-23 00:42:12 -07:00
Manish Goregaokar
5629223782
Rollup merge of #74548 - tshepang:one-more-example, r=dtolnay
one more Path::with_extension example, to demonstrate behavior
2020-07-23 00:42:10 -07:00
Manish Goregaokar
f98c77c8b6
Rollup merge of #74490 - yaahc:disabled-bt, r=dtolnay
add a Backtrace::disabled function

Based upon @dtolnay's suggestion here: https://github.com/dtolnay/anyhow/pull/97#issuecomment-647172942
2020-07-23 00:42:07 -07:00
Manish Goregaokar
9be1099107
Rollup merge of #74141 - euclio:typos, r=steveklabnik
libstd/libcore: fix various typos
2020-07-23 00:42:01 -07:00
bors
fcac11993c Auto merge of #74611 - Mark-Simulacrum:revert-74069-bad-niche, r=eddyb
Revert "Compare tagged/niche-filling layout and pick the best one"

Reverts rust-lang/rust#74069. It caused a performance regression, see https://github.com/rust-lang/rust/pull/74069#issuecomment-662166827. perf: https://perf.rust-lang.org/compare.html?start=d3df8512d2c2afc6d2e7d8b5b951dd7f2ad77b02&end=cfade73820883adf654fe34fd6b0b03a99458a51

r? @eddyb

cc @nnethercote
2020-07-23 07:11:01 +00:00
Neutron3529
ef74e50843 Rearrange the pipeline of pow to gain efficiency
The check of the `exp` parameter seems useless if we execute the while-loop more than once.
The original implementation of `pow` function using one more comparison if the `exp==0` and may break the pipeline of the cpu, which may generate a slower code.
The performance gap between the old and the new implementation may be small, but IMO, at least the newer one looks more beautiful.

---

bench prog:
```
extern crate test;
($a:expr)=>{let time=std::time::Instant::now();{$a;}print!("{:?} ",time.elapsed())};
($a:expr,$b:literal)=>{let time=std::time::Instant::now();let mut a=0;for _ in 0..$b{a^=$a;}print!("{:?} {} ",time.elapsed(),a)}
}
pub fn pow_rust(x:i64, mut exp: u32) -> i64 {
    let mut base = x;
    let mut acc = 1;
    while exp > 1 {
        if (exp & 1) == 1 {
            acc = acc * base;
        }
        exp /= 2;
        base = base * base;
    }
    if exp == 1 {
        acc = acc * base;
    }
    acc
}
pub fn pow_new(x:i64, mut exp: u32) -> i64 {
    if exp==0{
        1
    }else{
        let mut base = x;
        let mut acc = 1;
        while exp > 1 {
            if (exp & 1) == 1 {
                acc = acc * base;
            }
            exp >>= 1;
            base = base * base;
        }
        acc * base
    }
}

fn main(){
let a=2i64;
let b=1_u32;
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
timing!(test::black_box(a).pow(test::black_box(b)),100000000);
timing!(pow_new(test::black_box(a),test::black_box(b)),100000000);
timing!(pow_rust(test::black_box(a),test::black_box(b)),100000000);
println!();
}
```
bench in my laptop:
```
neutron@Neutron:/me/rust$ rc commit.rs
rustc commit.rs  && ./commit

3.978419716s 0 4.079765171s 0 3.964630622s 0
3.997127013s 0 4.260304804s 0 3.997638211s 0
3.963195544s 0 4.11657718s 0 4.176054164s 0
3.830128579s 0 3.980396122s 0 3.937258567s 0
3.986055948s 0 4.127804162s 0 4.018943411s 0
4.185568857s 0 4.217512517s 0 3.98313603s 0
3.863018225s 0 4.030447988s 0 3.694878237s 0
4.206987927s 0 4.137608047s 0 4.115564664s 0
neutron@Neutron:/me/rust$ rc commit.rs -O
rustc commit.rs -O && ./commit

162.111993ms 0 165.107125ms 0 166.26924ms 0
175.20479ms 0 205.062565ms 0 176.278791ms 0
174.408975ms 0 166.526899ms 0 201.857604ms 0
146.190062ms 0 168.592821ms 0 154.61411ms 0
199.678912ms 0 168.411598ms 0 162.129996ms 0
147.420765ms 0 209.759326ms 0 154.807907ms 0
165.507134ms 0 188.476239ms 0 157.351524ms 0
121.320123ms 0 126.401229ms 0 114.86428ms 0
```

delete an unnecessary semicolon...

Sorry for the typo.

delete trailing whitespace

Sorry, too..

Sorry for the missing...

I checked all the implementations, and finally found that there is one function that does not check whether `exp == 0`

add extra tests

add extra tests.

finished adding the extra tests to prevent further typo

add pow(2) to negative exp

add whitespace.

add whitespace

add whitespace

delete extra line
2020-07-23 14:55:15 +08:00
Steven Malis
bbaab63f84 Include the note in the test. 2020-07-22 23:19:38 -07:00
Bastian Kauschke
2f565967b0 tweak wording
Co-authored-by: varkor <github@varkor.com>
2020-07-23 08:14:39 +02:00
Steven Malis
dc7d1156be Don't ICE on unconstrained anonymous lifetimes inside associated types. 2020-07-22 23:01:15 -07:00
Philippe Nadon
55984b65ce renamed ScalarMaybeUninit::not_undef to check_init
Renamed the function ScalarMaybeUninit::not_undef to ScalarMaybeUninit::check_init in the file src/librustc_middle/mir/interpret/value.rs, to reflect changes in terminology used.

Related issue rust-lang#71193
2020-07-22 22:58:11 -06:00
Lzu Tao
0de7fade10 Prefer constant over function 2020-07-23 02:49:40 +00:00
Lzu Tao
d19b12df41 Prefer type@str 2020-07-23 02:42:37 +00:00
Lzu Tao
47d0d2ff63 Make str point to primitive page 2020-07-23 02:37:17 +00:00
bors
e8b55a4ad2 Auto merge of #74662 - Manishearth:rollup-jdt7t71, r=Manishearth
Rollup of 9 pull requests

Successful merges:

 - #73783 (Detect when `'static` obligation might come from an `impl`)
 - #73868 (Advertise correct stable version for const control flow)
 - #74460 (rustdoc: Always warn when linking from public to private items)
 - #74538 (Guard against non-monomorphized type_id intrinsic call)
 - #74541 (Add the aarch64-apple-darwin target )
 - #74600 (Enable perf try builder)
 - #74618 (Do not ICE on assoc type with bad placeholder)
 - #74631 (rustc_target: Add a target spec option for disabling `--eh-frame-hdr`)
 - #74643 (build: Remove unnecessary `cargo:rerun-if-env-changed` annotations)

Failed merges:

r? @ghost
2020-07-23 00:37:58 +00:00
Jane Lusby
50347b84dd
Update src/libstd/backtrace.rs
Co-authored-by: David Tolnay <dtolnay@gmail.com>
2020-07-22 17:19:02 -07:00
Tshepang Lekhonkhobe
83094ea11a
one more Path::with_extension example, to demonstrate behavior 2020-07-22 16:39:45 -07:00
Josh Stone
ae06e13b8d Move the pipe2 call behind a hard target #[cfg] 2020-07-22 16:38:58 -07:00
Manish Goregaokar
b32383ca90
Rollup merge of #74643 - petrochenkov:noenvrerun, r=Mark-Simulacrum
build: Remove unnecessary `cargo:rerun-if-env-changed` annotations

... and a couple of related cleanups.

rustc and cargo now track the majority of env var dependencies automatically (https://github.com/rust-lang/cargo/pull/8421), so the annotations are no longer necessary.
2020-07-22 16:34:50 -07:00
Manish Goregaokar
7b28e7bf6b
Rollup merge of #74631 - petrochenkov:ehdr2, r=jonas-schievink
rustc_target: Add a target spec option for disabling `--eh-frame-hdr`

Disable `--eh-frame-hdr` for targets that use an `ld`-like linker, but don't support that option.
Do it through a target spec option rather than through hard-coding in `linker.rs`.
The option is still enabled by default though.

cc https://github.com/rust-lang/rust/pull/73564
Fixes https://github.com/rust-lang/rust/pull/73564#issuecomment-657011004
Fixes https://github.com/rust-lang/rust/pull/74625
Fixes https://github.com/rust-embedded/msp430-rt/issues/12
2020-07-22 16:34:48 -07:00
Manish Goregaokar
9ac2af1dfc
Rollup merge of #74618 - JohnTitor:no-more-bad-placeholder, r=estebank
Do not ICE on assoc type with bad placeholder

Fixes #74612
r? @estebank
2020-07-22 16:34:46 -07:00
Manish Goregaokar
0edf2e618d
Rollup merge of #74600 - Mark-Simulacrum:try-perf, r=pietroalbini
Enable perf try builder

This adds a dedicated branch for perf to use for CI, intended to allow perf to
enqueue builds without needing to use bors. bors is great, but bors requires an
open PR to work, and we want to invoke perf on closed PRs sometimes (in
particular, rollups).
2020-07-22 16:34:44 -07:00
Manish Goregaokar
8114dc7a4a
Rollup merge of #74541 - shepmaster:aarch64-apple-darwin-target, r=nagisa
Add the aarch64-apple-darwin target

This is a basic copy-paste-modify from the existing
x86_64-apple-darwin target.
2020-07-22 16:34:43 -07:00
Manish Goregaokar
4828895cd9
Rollup merge of #74538 - nbdd0121:issue-73976, r=lcnr
Guard against non-monomorphized type_id intrinsic call

This PR checks whether the type is sufficient monomorphized when calling type_id or type_name intrinsics. If the type is not sufficiently monomorphized, e.g. used in a pattern, the code will be rejected.

Fixes #73976
2020-07-22 16:34:41 -07:00
Manish Goregaokar
02e350f5a2
Rollup merge of #74460 - dennis-hamester:rustdoc-warn-pub-to-priv, r=jyn514
rustdoc: Always warn when linking from public to private items

Change the logic such that linking from a public to a private item always triggers `intra_doc_link_resolution_failure`.
Previously, the warning was not emitted when `--document-private-items` is passed.

This came up during the discussion in https://github.com/rust-lang/rust/pull/74147#discussion_r452597901.
2020-07-22 16:34:39 -07:00
Manish Goregaokar
da449a9c1b
Rollup merge of #73868 - ecstatic-morse:fix-stable-version, r=jonas-schievink
Advertise correct stable version for const control flow

#72437 was opened before the 1.45 release but merged afterwards. These will be stable in 1.46.
2020-07-22 16:34:37 -07:00
Manish Goregaokar
fe9babbaed
Rollup merge of #73783 - estebank:impl-dyn-trait-static-lifetime, r=nikomatsakis
Detect when `'static` obligation might come from an `impl`

Partly address #71341.
2020-07-22 16:34:36 -07:00
SNCPlay42
8a776ee239 rename arguments to highlight_if_we_can_match_hir_ty 2020-07-23 00:21:16 +01:00
SNCPlay42
ebb4ababfc move highlight_if_we_can_match_hir_ty call
out of highlight_if_we_can_match_hir_ty_from_argument, which is then
renamed
2020-07-23 00:21:16 +01:00
SNCPlay42
a7450b7989 decouple highlight_if_we_cannot_match_hir_ty 2020-07-22 23:52:50 +01:00
SNCPlay42
b56f5b9df5 clean up give_name_if_anonymous_region_appears_in_arguments 2020-07-22 23:52:49 +01:00
SNCPlay42
723ea90992 rename functions 2020-07-22 23:52:49 +01:00
SNCPlay42
601518edcd change returns to RegionNameHighlight 2020-07-22 23:52:49 +01:00
SNCPlay42
51af5af6fd extract RegionNameHighlight 2020-07-22 23:52:49 +01:00
SNCPlay42
c27633489d add RegionName::span 2020-07-22 23:52:49 +01:00
Alex Crichton
618aeec51f Improve codegen for unchecked float casts on wasm
This commit improves codegen for unchecked casts on WebAssembly targets
to use the singluar `iNN.trunc_fMM_{u,s}` instructions. Previously rustc
would codegen a bare `fptosi` and `fptoui` for float casts but for
WebAssembly targets the codegen for these instructions is quite large.
This large codegen is due to the fact that LLVM can speculate these
instructions so the trapping behavior of WebAssembly needs to be
protected against in case they're speculated.

The change here is to update the codegen for the unchecked cast
intrinsics to have a wasm-specific case where they call the appropriate
LLVM intrinsic to generate the right wasm instruction. The intrinsic is
explicitly opting-in to undefined behavior so a trap here for
out-of-bounds inputs on wasm should be acceptable.

cc #73591
2020-07-22 15:05:05 -07:00
bors
4a86573c6b Auto merge of #74404 - lcnr:ty-dep-path-cleanup-aaaaa, r=eddyb
remove some const arg in ty dep path boilerplate

followup to #74113, together with #74376, this closes #74360.

r? @eddyb
2020-07-22 21:50:21 +00:00
Stein Somers
2152d18f92 More BTreeMap test cases, some exposing undefined behaviour 2020-07-22 23:40:06 +02:00
Bastian Kauschke
a95e6bb916 require type defaults to be after const generic parameters
as if this is currently possible. HA!
2020-07-22 22:58:54 +02:00
Esteban Küber
889a4d9a0b Change error code number 2020-07-22 13:12:34 -07:00
Alexis Bourget
e601e2ac48 Improve the documentation for Vec::drain 2020-07-22 21:50:16 +02:00
Dennis Hamester
c14641a814 rustdoc: Add explanation when linting against public to private item links
The additional note helps explaining why the lint was triggered and that
--document-private-items directly influences the link resolution.
2020-07-22 21:40:51 +02:00
Dennis Hamester
ed53de029c rustdoc: Always warn when linking from public to private items
Change the logic such that linking from a public to a private item always
triggers intra_doc_link_resolution_failure. Previously, the warning was
not emitted when --document-private-items is passed.

Also don't rely anymore on the item's visibility, which would falsely trigger
the lint now that the check for --document-private-items is gone.
2020-07-22 21:36:30 +02:00
bors
bbebe7351f Auto merge of #74633 - davidtwco:issue-74614-disable-polymorphisation, r=wesleywiser
Disable polymorphisation

Fixes #74614.

This PR disables polymorphisation to fix the regression in #74614 after investigation into the issue makes it clear that the fix won't be trivial. ~~I'll file an issue shortly to replace #74614 with the findings so far.~~ #74636 has been filed to track the fix of the underlying regression.

r? @eddyb
2020-07-22 19:34:20 +00:00
Esteban Küber
53d96b5159 Handle fully-qualified paths and add test cases 2020-07-22 12:25:55 -07:00
Esteban Küber
3712dfc677 Partially account for case where used method is from trait 2020-07-22 12:25:55 -07:00
Esteban Küber
f80743712e Use ty::Instance::resolve to identify 'static bound source 2020-07-22 12:25:55 -07:00
Esteban Küber
7bf39fa9d9 Further tweak wording of E0759 and introduce E0767 2020-07-22 12:25:54 -07:00
Esteban Küber
6bac3dbfc2 Add more context to diagnostic 2020-07-22 12:25:54 -07:00
Esteban Küber
4e08bab87d Increase accuracy of lifetime bound on trait object impl suggestion 2020-07-22 12:25:54 -07:00