mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-11 15:23:05 +00:00
Auto merge of #44634 - alexcrichton:rollup, r=alexcrichton
Rollup of 19 pull requests - Successful merges: #44273, #44356, #44395, #44531, #44537, #44542, #44560, #44567, #44574, #44577, #44586, #44589, #44590, #44593, #44598, #44606, #44609, #44616, #44631 - Failed merges:
This commit is contained in:
commit
71e37674a1
85
.travis.yml
85
.travis.yml
@ -12,14 +12,19 @@ matrix:
|
||||
fast_finish: true
|
||||
include:
|
||||
# Images used in testing PR and try-build should be run first.
|
||||
- env: IMAGE=x86_64-gnu-llvm-3.7 ALLOW_PR=1 RUST_BACKTRACE=1
|
||||
- env: IMAGE=dist-x86_64-linux DEPLOY=1 ALLOW_TRY=1
|
||||
- env: IMAGE=x86_64-gnu-llvm-3.7 RUST_BACKTRACE=1
|
||||
if: type = pull_request OR branch = auto
|
||||
|
||||
- env: IMAGE=dist-x86_64-linux DEPLOY=1
|
||||
if: branch = try OR branch = auto
|
||||
|
||||
# "alternate" deployments, these are "nightlies" but don't have assertions
|
||||
# turned on, they're deployed to a different location primarily for projects
|
||||
# which are stuck on nightly and don't want llvm assertions in the artifacts
|
||||
# that they use.
|
||||
- env: IMAGE=dist-x86_64-linux DEPLOY_ALT=1
|
||||
if: branch = auto
|
||||
|
||||
- env: >
|
||||
RUST_CHECK_TARGET=dist
|
||||
RUST_CONFIGURE_ARGS="--enable-extended --enable-profiler"
|
||||
@ -31,6 +36,7 @@ matrix:
|
||||
NO_LLVM_ASSERTIONS=1
|
||||
os: osx
|
||||
osx_image: xcode7
|
||||
if: branch = auto
|
||||
|
||||
# macOS builders. These are placed near the beginning because they are very
|
||||
# slow to run.
|
||||
@ -50,6 +56,8 @@ matrix:
|
||||
NO_LLVM_ASSERTIONS=1
|
||||
os: osx
|
||||
osx_image: xcode8.2
|
||||
if: branch = auto
|
||||
|
||||
- env: >
|
||||
RUST_CHECK_TARGET=check
|
||||
RUST_CONFIGURE_ARGS=--build=i686-apple-darwin
|
||||
@ -61,6 +69,7 @@ matrix:
|
||||
NO_LLVM_ASSERTIONS=1
|
||||
os: osx
|
||||
osx_image: xcode8.2
|
||||
if: branch = auto
|
||||
|
||||
# OSX builders producing releases. These do not run the full test suite and
|
||||
# just produce a bunch of artifacts.
|
||||
@ -79,6 +88,8 @@ matrix:
|
||||
NO_LLVM_ASSERTIONS=1
|
||||
os: osx
|
||||
osx_image: xcode7
|
||||
if: branch = auto
|
||||
|
||||
- env: >
|
||||
RUST_CHECK_TARGET=dist
|
||||
RUST_CONFIGURE_ARGS="--target=aarch64-apple-ios,armv7-apple-ios,armv7s-apple-ios,i386-apple-ios,x86_64-apple-ios --enable-extended --enable-sanitizers --enable-profiler"
|
||||
@ -90,79 +101,92 @@ matrix:
|
||||
NO_LLVM_ASSERTIONS=1
|
||||
os: osx
|
||||
osx_image: xcode7
|
||||
if: branch = auto
|
||||
|
||||
# Linux builders, remaining docker images
|
||||
- env: IMAGE=arm-android
|
||||
if: branch = auto
|
||||
- env: IMAGE=armhf-gnu
|
||||
if: branch = auto
|
||||
- env: IMAGE=cross DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-aarch64-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-android DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-arm-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-armhf-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-armv7-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-fuchsia DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-i586-gnu-i686-musl DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-i686-freebsd DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-i686-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-mips-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-mips64-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-mips64el-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-mipsel-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-powerpc-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-powerpc64-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-powerpc64le-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-s390x-linux DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-x86_64-freebsd DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-x86_64-musl DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=dist-x86_64-netbsd DEPLOY=1
|
||||
if: branch = auto
|
||||
- env: IMAGE=asmjs
|
||||
if: branch = auto
|
||||
- env: IMAGE=i686-gnu
|
||||
if: branch = auto
|
||||
- env: IMAGE=i686-gnu-nopt
|
||||
if: branch = auto
|
||||
# - env: IMAGE=wasm32 issue 42646
|
||||
# if: branch = auto
|
||||
- env: IMAGE=x86_64-gnu
|
||||
if: branch = auto
|
||||
- env: IMAGE=x86_64-gnu-full-bootstrap
|
||||
if: branch = auto
|
||||
- env: IMAGE=x86_64-gnu-aux
|
||||
if: branch = auto
|
||||
- env: IMAGE=x86_64-gnu-debug
|
||||
if: branch = auto
|
||||
- env: IMAGE=x86_64-gnu-nopt
|
||||
if: branch = auto
|
||||
- env: IMAGE=x86_64-gnu-distcheck
|
||||
if: branch = auto
|
||||
- env: IMAGE=x86_64-gnu-incremental
|
||||
if: branch = auto
|
||||
|
||||
env:
|
||||
global:
|
||||
- SCCACHE_BUCKET=rust-lang-ci-sccache
|
||||
- SCCACHE_BUCKET=rust-lang-ci-sccache2
|
||||
- SCCACHE_REGION=us-west-1
|
||||
- AWS_ACCESS_KEY_ID=AKIAJAMV3QAMMA6AXHFQ
|
||||
# AWS_SECRET_ACCESS_KEY=...
|
||||
- secure: "j96XxTVOSUf4s4r4htIxn/fvIa5DWbMgLqWl7r8z2QfgUwscmkMXAwXuFNc7s7bGTpV/+CgDiMFFM6BAFLGKutytIF6oA02s9b+usQYnM0th7YQ2AIgm9GtMTJCJp4AoyfFmh8F2faUICBZlfVLUJ34udHEe35vOklix+0k4WDo="
|
||||
|
||||
before_install:
|
||||
# If we are building a pull request, do the build if $ALLOW_PR == 1
|
||||
# Otherwise, do the build if we are on the auto branch, or the try branch and $ALLOW_TRY == 1
|
||||
- >
|
||||
if [[ "$TRAVIS_PULL_REQUEST" != "false" ]]; then
|
||||
if [[ "$ALLOW_PR" == "1" ]]; then
|
||||
export SKIP_BUILD=false;
|
||||
else
|
||||
export SKIP_BUILD=true;
|
||||
fi;
|
||||
elif [[ "$TRAVIS_BRANCH" == "auto" || ( "$ALLOW_TRY" == "1" && "$TRAVIS_BRANCH" == "try" ) ]]; then
|
||||
export SKIP_BUILD=false;
|
||||
else
|
||||
export SKIP_BUILD=true;
|
||||
fi
|
||||
- >
|
||||
if [[ "$SKIP_BUILD" == false ]]; then
|
||||
zcat $HOME/docker/rust-ci.tar.gz | docker load || true
|
||||
fi
|
||||
- zcat $HOME/docker/rust-ci.tar.gz | docker load || true
|
||||
- mkdir -p $HOME/rustsrc
|
||||
|
||||
install:
|
||||
- >
|
||||
if [[ "$SKIP_BUILD" == true ]]; then
|
||||
echo echo skipping, not a full build > $HOME/stamp &&
|
||||
chmod +x $HOME/stamp &&
|
||||
export PATH=$PATH:$HOME;
|
||||
else
|
||||
case "$TRAVIS_OS_NAME" in
|
||||
- case "$TRAVIS_OS_NAME" in
|
||||
linux)
|
||||
travis_retry curl -fo $HOME/stamp https://s3.amazonaws.com/rust-lang-ci/rust-ci-mirror/2017-03-17-stamp-x86_64-unknown-linux-musl &&
|
||||
chmod +x $HOME/stamp &&
|
||||
@ -178,8 +202,7 @@ install:
|
||||
travis_retry curl -fo /usr/local/bin/stamp https://s3.amazonaws.com/rust-lang-ci/rust-ci-mirror/2017-03-17-stamp-x86_64-apple-darwin &&
|
||||
chmod +x /usr/local/bin/stamp
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
esac
|
||||
|
||||
before_script:
|
||||
- >
|
||||
@ -284,7 +307,7 @@ deploy:
|
||||
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
||||
on:
|
||||
branch: try
|
||||
condition: $DEPLOY = 1 && $ALLOW_TRY = 1
|
||||
condition: $DEPLOY = 1
|
||||
|
||||
# this is the same as the above deployment provider except that it uploads to
|
||||
# a slightly different directory and has a different trigger
|
||||
|
@ -1,5 +1,6 @@
|
||||
environment:
|
||||
SCCACHE_BUCKET: rust-lang-ci-sccache
|
||||
SCCACHE_BUCKET: rust-lang-ci-sccache2
|
||||
SCCACHE_REGION: us-west-1
|
||||
AWS_ACCESS_KEY_ID: AKIAJAMV3QAMMA6AXHFQ
|
||||
AWS_SECRET_ACCESS_KEY:
|
||||
secure: 7Y+JiquYedOAgnUU26uL0DPzrxmTtR+qIwG6rNKSuWDffqU3vVZxbGXim9QpTO80
|
||||
|
54
src/Cargo.lock
generated
54
src/Cargo.lock
generated
@ -47,7 +47,7 @@ dependencies = [
|
||||
"alloc_system 0.0.0",
|
||||
"build_helper 0.1.0",
|
||||
"core 0.0.0",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.0.0",
|
||||
]
|
||||
|
||||
@ -103,7 +103,7 @@ name = "backtrace-sys"
|
||||
version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -135,9 +135,9 @@ name = "bootstrap"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"build_helper 0.1.0",
|
||||
"cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"filetime 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -267,10 +267,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "cmake"
|
||||
version = "0.1.24"
|
||||
version = "0.1.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -286,7 +286,7 @@ name = "compiler_builtins"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"core 0.0.0",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -402,7 +402,7 @@ name = "curl-sys"
|
||||
version = "0.3.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libz-sys 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -582,7 +582,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "gcc"
|
||||
version = "0.3.53"
|
||||
version = "0.3.54"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
@ -840,9 +840,9 @@ name = "libgit2-sys"
|
||||
version = "0.6.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"curl-sys 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libssh2-sys 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libz-sys 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -855,7 +855,7 @@ name = "libssh2-sys"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libz-sys 1.0.16 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"openssl-sys 0.9.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -867,7 +867,7 @@ name = "libz-sys"
|
||||
version = "1.0.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -888,7 +888,7 @@ version = "0.1.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"filetime 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -974,7 +974,7 @@ name = "miniz-sys"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
@ -1110,7 +1110,7 @@ name = "openssl-sys"
|
||||
version = "0.9.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.30 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pkg-config 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"vcpkg 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1215,7 +1215,7 @@ name = "profiler_builtins"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"core 0.0.0",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -1476,7 +1476,7 @@ dependencies = [
|
||||
"alloc 0.0.0",
|
||||
"alloc_system 0.0.0",
|
||||
"build_helper 0.1.0",
|
||||
"cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core 0.0.0",
|
||||
]
|
||||
|
||||
@ -1611,7 +1611,7 @@ name = "rustc_llvm"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"build_helper 0.1.0",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"rustc_bitflags 0.0.0",
|
||||
]
|
||||
|
||||
@ -1622,7 +1622,7 @@ dependencies = [
|
||||
"alloc 0.0.0",
|
||||
"alloc_system 0.0.0",
|
||||
"build_helper 0.1.0",
|
||||
"cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core 0.0.0",
|
||||
]
|
||||
|
||||
@ -1667,7 +1667,7 @@ dependencies = [
|
||||
"alloc 0.0.0",
|
||||
"alloc_system 0.0.0",
|
||||
"build_helper 0.1.0",
|
||||
"cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core 0.0.0",
|
||||
]
|
||||
|
||||
@ -1741,7 +1741,7 @@ name = "rustc_trans"
|
||||
version = "0.0.0"
|
||||
dependencies = [
|
||||
"flate2 0.2.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"jobserver 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"num_cpus 1.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1779,7 +1779,7 @@ dependencies = [
|
||||
"alloc 0.0.0",
|
||||
"alloc_system 0.0.0",
|
||||
"build_helper 0.1.0",
|
||||
"cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"core 0.0.0",
|
||||
]
|
||||
|
||||
@ -1806,7 +1806,7 @@ version = "0.0.0"
|
||||
dependencies = [
|
||||
"build_helper 0.1.0",
|
||||
"env_logger 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"html-diff 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"pulldown-cmark 0.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
@ -1979,7 +1979,7 @@ dependencies = [
|
||||
"collections 0.0.0",
|
||||
"compiler_builtins 0.0.0",
|
||||
"core 0.0.0",
|
||||
"gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.0.0",
|
||||
"panic_abort 0.0.0",
|
||||
"panic_unwind 0.0.0",
|
||||
@ -2455,7 +2455,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
"checksum bufstream 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f2f382711e76b9de6c744cc00d0497baba02fb00a787f088c879f01d09468e32"
|
||||
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
|
||||
"checksum clap 2.26.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2267a8fdd4dce6956ba6649e130f62fb279026e5e84b92aa939ac8f85ce3f9f0"
|
||||
"checksum cmake 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b8ebbb35d3dc9cd09497168f33de1acb79b265d350ab0ac34133b98f8509af1f"
|
||||
"checksum cmake 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)" = "0c8a6541a55bcd72d3de4faee2d101a5a66df29790282c7f797082a7228a9b3d"
|
||||
"checksum conv 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "78ff10625fd0ac447827aa30ea8b861fead473bb60aeb73af6c1c58caf0d1299"
|
||||
"checksum core-foundation 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5909502e547762013619f4c4e01cc7393c20fe2d52d7fa471c1210adb2320dc7"
|
||||
"checksum core-foundation-sys 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "bc9fb3d6cb663e6fd7cf1c63f9b144ee2b1e4a78595a0451dd34bff85b9a3387"
|
||||
@ -2484,7 +2484,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
"checksum fs2 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9ab76cfd2aaa59b7bf6688ad9ba15bbae64bff97f04ea02144cfd3443e5c2866"
|
||||
"checksum futf 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "51f93f3de6ba1794dcd5810b3546d004600a59a98266487c8407bc4b24e398f3"
|
||||
"checksum futures 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)" = "a82bdc62350ca9d7974c760e9665102fc9d740992a528c2254aa930e53b783c4"
|
||||
"checksum gcc 0.3.53 (registry+https://github.com/rust-lang/crates.io-index)" = "e8310f7e9c890398b0e80e301c4f474e9918d2b27fca8f48486ca775fa9ffc5a"
|
||||
"checksum gcc 0.3.54 (registry+https://github.com/rust-lang/crates.io-index)" = "5e33ec290da0d127825013597dbdfc28bee4964690c7ce1166cbc2a7bd08b1bb"
|
||||
"checksum getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "d9047cfbd08a437050b363d35ef160452c5fe8ea5187ae0a624708c91581d685"
|
||||
"checksum git2 0.6.8 (registry+https://github.com/rust-lang/crates.io-index)" = "0c1c0203d653f4140241da0c1375a404f0a397249ec818cd2076c6280c50f6fa"
|
||||
"checksum git2-curl 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "68676bc784bf0bef83278898929bf64a251e87c0340723d0b93fa096c9c5bf8e"
|
||||
|
@ -34,7 +34,7 @@ cmake = "0.1.23"
|
||||
filetime = "0.1"
|
||||
num_cpus = "1.0"
|
||||
getopts = "0.2"
|
||||
gcc = "0.3.50"
|
||||
gcc = "0.3.54"
|
||||
libc = "0.2"
|
||||
serde = "1.0.8"
|
||||
serde_derive = "1.0.8"
|
||||
|
@ -1118,10 +1118,11 @@ impl Step for Rustdoc {
|
||||
let compiler = builder.compiler(builder.top_stage, self.host);
|
||||
let target = compiler.host;
|
||||
|
||||
builder.ensure(RemoteCopyLibs { compiler, target });
|
||||
|
||||
let mut cargo = builder.cargo(compiler, Mode::Librustc, target, test_kind.subcommand());
|
||||
compile::rustc_cargo(build, &compiler, target, &mut cargo);
|
||||
let mut cargo = tool::prepare_tool_cargo(builder,
|
||||
compiler,
|
||||
target,
|
||||
test_kind.subcommand(),
|
||||
"src/tools/rustdoc");
|
||||
let _folder = build.fold_output(|| {
|
||||
format!("{}_stage{}-rustdoc", test_kind.subcommand(), compiler.stage)
|
||||
});
|
||||
|
@ -1098,8 +1098,14 @@ impl Step for Rls {
|
||||
.arg("--output-dir").arg(&distdir(build))
|
||||
.arg("--non-installed-overlay").arg(&overlay)
|
||||
.arg(format!("--package-name={}-{}", name, target))
|
||||
.arg("--component-name=rls")
|
||||
.arg("--legacy-manifest-dirs=rustlib,cargo");
|
||||
|
||||
if build.config.channel == "nightly" {
|
||||
cmd.arg("--component-name=rls");
|
||||
} else {
|
||||
cmd.arg("--component-name=rls-preview");
|
||||
}
|
||||
|
||||
build.run(&mut cmd);
|
||||
distdir(build).join(format!("{}-{}.tar.gz", name, target))
|
||||
}
|
||||
@ -1302,9 +1308,12 @@ impl Step for Extended {
|
||||
cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-std"), target))
|
||||
.join(format!("rust-std-{}", target)),
|
||||
&exe.join("rust-std"));
|
||||
cp_r(&work.join(&format!("{}-{}", pkgname(build, "rls"), target))
|
||||
.join("rls"),
|
||||
&exe.join("rls"));
|
||||
let rls_path = if build.config.channel == "nightly" {
|
||||
work.join(&format!("{}-{}", pkgname(build, "rls"), target)).join("rls")
|
||||
} else {
|
||||
work.join(&format!("{}-{}", pkgname(build, "rls"), target)).join("rls-preview")
|
||||
};
|
||||
cp_r(&rls_path, &exe.join("rls"));
|
||||
cp_r(&work.join(&format!("{}-{}", pkgname(build, "rust-analysis"), target))
|
||||
.join(format!("rust-analysis-{}", target)),
|
||||
&exe.join("rust-analysis"));
|
||||
|
@ -94,20 +94,21 @@ impl Step for ToolBuild {
|
||||
let _folder = build.fold_output(|| format!("stage{}-{}", compiler.stage, tool));
|
||||
println!("Building stage{} tool {} ({})", compiler.stage, tool, target);
|
||||
|
||||
let mut cargo = prepare_tool_cargo(builder, compiler, target, path);
|
||||
let mut cargo = prepare_tool_cargo(builder, compiler, target, "build", path);
|
||||
build.run(&mut cargo);
|
||||
build.cargo_out(compiler, Mode::Tool, target).join(exe(tool, &compiler.host))
|
||||
}
|
||||
}
|
||||
|
||||
fn prepare_tool_cargo(
|
||||
pub fn prepare_tool_cargo(
|
||||
builder: &Builder,
|
||||
compiler: Compiler,
|
||||
target: Interned<String>,
|
||||
command: &'static str,
|
||||
path: &'static str,
|
||||
) -> Command {
|
||||
let build = builder.build;
|
||||
let mut cargo = builder.cargo(compiler, Mode::Tool, target, "build");
|
||||
let mut cargo = builder.cargo(compiler, Mode::Tool, target, command);
|
||||
let dir = build.src.join(path);
|
||||
cargo.arg("--manifest-path").arg(dir.join("Cargo.toml"));
|
||||
|
||||
@ -295,6 +296,7 @@ impl Step for Rustdoc {
|
||||
let mut cargo = prepare_tool_cargo(builder,
|
||||
build_compiler,
|
||||
target,
|
||||
"build",
|
||||
"src/tools/rustdoc");
|
||||
build.run(&mut cargo);
|
||||
// Cargo adds a number of paths to the dylib search path on windows, which results in
|
||||
|
@ -57,9 +57,10 @@ mkdir -p $objdir/tmp
|
||||
|
||||
args=
|
||||
if [ "$SCCACHE_BUCKET" != "" ]; then
|
||||
args="$args --env SCCACHE_BUCKET=$SCCACHE_BUCKET"
|
||||
args="$args --env AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID"
|
||||
args="$args --env AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY"
|
||||
args="$args --env SCCACHE_BUCKET"
|
||||
args="$args --env SCCACHE_REGION"
|
||||
args="$args --env AWS_ACCESS_KEY_ID"
|
||||
args="$args --env AWS_SECRET_ACCESS_KEY"
|
||||
args="$args --env SCCACHE_ERROR_LOG=/tmp/sccache/sccache.log"
|
||||
args="$args --volume $objdir/tmp:/tmp/sccache"
|
||||
else
|
||||
@ -82,10 +83,10 @@ exec docker \
|
||||
--env SRC=/checkout \
|
||||
$args \
|
||||
--env CARGO_HOME=/cargo \
|
||||
--env DEPLOY=$DEPLOY \
|
||||
--env DEPLOY_ALT=$DEPLOY_ALT \
|
||||
--env DEPLOY \
|
||||
--env DEPLOY_ALT \
|
||||
--env LOCAL_USER_ID=`id -u` \
|
||||
--env TRAVIS=${TRAVIS-false} \
|
||||
--env TRAVIS \
|
||||
--env TRAVIS_BRANCH \
|
||||
--volume "$HOME/.cargo:/cargo" \
|
||||
--volume "$HOME/rustsrc:$HOME/rustsrc" \
|
||||
|
@ -244,6 +244,7 @@ use boxed::Box;
|
||||
#[cfg(test)]
|
||||
use std::boxed::Box;
|
||||
|
||||
use core::any::Any;
|
||||
use core::borrow;
|
||||
use core::cell::Cell;
|
||||
use core::cmp::Ordering;
|
||||
@ -608,6 +609,46 @@ impl<T: Clone> Rc<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl Rc<Any> {
|
||||
#[inline]
|
||||
#[unstable(feature = "rc_downcast", issue = "44608")]
|
||||
/// Attempt to downcast the `Rc<Any>` to a concrete type.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(rc_downcast)]
|
||||
/// use std::any::Any;
|
||||
/// use std::rc::Rc;
|
||||
///
|
||||
/// fn print_if_string(value: Rc<Any>) {
|
||||
/// if let Ok(string) = value.downcast::<String>() {
|
||||
/// println!("String ({}): {}", string.len(), string);
|
||||
/// }
|
||||
/// }
|
||||
///
|
||||
/// fn main() {
|
||||
/// let my_string = "Hello World".to_string();
|
||||
/// print_if_string(Rc::new(my_string));
|
||||
/// print_if_string(Rc::new(0i8));
|
||||
/// }
|
||||
/// ```
|
||||
pub fn downcast<T: Any>(self) -> Result<Rc<T>, Rc<Any>> {
|
||||
if (*self).is::<T>() {
|
||||
// avoid the pointer arithmetic in from_raw
|
||||
unsafe {
|
||||
let raw: *const RcBox<Any> = self.ptr.as_ptr();
|
||||
forget(self);
|
||||
Ok(Rc {
|
||||
ptr: Shared::new_unchecked(raw as *const RcBox<T> as *mut _),
|
||||
})
|
||||
}
|
||||
} else {
|
||||
Err(self)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<T: ?Sized> Rc<T> {
|
||||
// Allocates an `RcBox<T>` with sufficient space for an unsized value
|
||||
unsafe fn allocate_for_ptr(ptr: *const T) -> *mut RcBox<T> {
|
||||
@ -1696,6 +1737,26 @@ mod tests {
|
||||
|
||||
assert_eq!(&r[..], [1, 2, 3]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_downcast() {
|
||||
use std::any::Any;
|
||||
|
||||
let r1: Rc<Any> = Rc::new(i32::max_value());
|
||||
let r2: Rc<Any> = Rc::new("abc");
|
||||
|
||||
assert!(r1.clone().downcast::<u32>().is_err());
|
||||
|
||||
let r1i32 = r1.downcast::<i32>();
|
||||
assert!(r1i32.is_ok());
|
||||
assert_eq!(r1i32.unwrap(), Rc::new(i32::max_value()));
|
||||
|
||||
assert!(r2.clone().downcast::<i32>().is_err());
|
||||
|
||||
let r2str = r2.downcast::<&'static str>();
|
||||
assert!(r2str.is_ok());
|
||||
assert_eq!(r2str.unwrap(), Rc::new("abc"));
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -146,3 +146,41 @@ fn bench_for_each_chain_ref_fold(b: &mut Bencher) {
|
||||
acc
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_flat_map_sum(b: &mut Bencher) {
|
||||
b.iter(|| -> i64 {
|
||||
(0i64..1000).flat_map(|x| x..x+1000)
|
||||
.map(black_box)
|
||||
.sum()
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_flat_map_ref_sum(b: &mut Bencher) {
|
||||
b.iter(|| -> i64 {
|
||||
(0i64..1000).flat_map(|x| x..x+1000)
|
||||
.map(black_box)
|
||||
.by_ref()
|
||||
.sum()
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_flat_map_chain_sum(b: &mut Bencher) {
|
||||
b.iter(|| -> i64 {
|
||||
(0i64..1000000).flat_map(|x| once(x).chain(once(x)))
|
||||
.map(black_box)
|
||||
.sum()
|
||||
});
|
||||
}
|
||||
|
||||
#[bench]
|
||||
fn bench_flat_map_chain_ref_sum(b: &mut Bencher) {
|
||||
b.iter(|| -> i64 {
|
||||
(0i64..1000000).flat_map(|x| once(x).chain(once(x)))
|
||||
.map(black_box)
|
||||
.by_ref()
|
||||
.sum()
|
||||
});
|
||||
}
|
||||
|
@ -453,12 +453,10 @@ pub trait Ord: Eq + PartialOrd<Self> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ord_max_min)]
|
||||
///
|
||||
/// assert_eq!(2, 1.max(2));
|
||||
/// assert_eq!(2, 2.max(2));
|
||||
/// ```
|
||||
#[unstable(feature = "ord_max_min", issue = "25663")]
|
||||
#[stable(feature = "ord_max_min", since = "1.22.0")]
|
||||
fn max(self, other: Self) -> Self
|
||||
where Self: Sized {
|
||||
if other >= self { other } else { self }
|
||||
@ -471,12 +469,10 @@ pub trait Ord: Eq + PartialOrd<Self> {
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ord_max_min)]
|
||||
///
|
||||
/// assert_eq!(1, 1.min(2));
|
||||
/// assert_eq!(2, 2.min(2));
|
||||
/// ```
|
||||
#[unstable(feature = "ord_max_min", issue = "25663")]
|
||||
#[stable(feature = "ord_max_min", since = "1.22.0")]
|
||||
fn min(self, other: Self) -> Self
|
||||
where Self: Sized {
|
||||
if self <= other { self } else { other }
|
||||
|
@ -1902,6 +1902,16 @@ impl<I: Iterator, U: IntoIterator, F> Iterator for FlatMap<I, U, F>
|
||||
_ => (lo, None)
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn fold<Acc, Fold>(self, init: Acc, mut fold: Fold) -> Acc
|
||||
where Fold: FnMut(Acc, Self::Item) -> Acc,
|
||||
{
|
||||
self.frontiter.into_iter()
|
||||
.chain(self.iter.map(self.f).map(U::into_iter))
|
||||
.chain(self.backiter)
|
||||
.fold(init, |acc, iter| iter.fold(acc, &mut fold))
|
||||
}
|
||||
}
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
|
@ -654,6 +654,22 @@ fn test_iterator_flat_map() {
|
||||
assert_eq!(i, ys.len());
|
||||
}
|
||||
|
||||
/// Test `FlatMap::fold` with items already picked off the front and back,
|
||||
/// to make sure all parts of the `FlatMap` are folded correctly.
|
||||
#[test]
|
||||
fn test_iterator_flat_map_fold() {
|
||||
let xs = [0, 3, 6];
|
||||
let ys = [1, 2, 3, 4, 5, 6, 7];
|
||||
let mut it = xs.iter().flat_map(|&x| x..x+3);
|
||||
it.next();
|
||||
it.next_back();
|
||||
let i = it.fold(0, |i, x| {
|
||||
assert_eq!(x, ys[i]);
|
||||
i + 1
|
||||
});
|
||||
assert_eq!(i, ys.len());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_inspect() {
|
||||
let xs = [1, 2, 3, 4];
|
||||
|
@ -26,7 +26,6 @@
|
||||
#![feature(inclusive_range_syntax)]
|
||||
#![feature(iter_rfind)]
|
||||
#![feature(nonzero)]
|
||||
#![feature(ord_max_min)]
|
||||
#![feature(rand)]
|
||||
#![feature(raw)]
|
||||
#![feature(refcell_replace_swap)]
|
||||
|
@ -22,11 +22,10 @@ impl DepGraphQuery {
|
||||
pub fn new(nodes: &[DepNode],
|
||||
edges: &[(DepNode, DepNode)])
|
||||
-> DepGraphQuery {
|
||||
let mut graph = Graph::new();
|
||||
let mut graph = Graph::with_capacity(nodes.len(), edges.len());
|
||||
let mut indices = FxHashMap();
|
||||
for node in nodes {
|
||||
indices.insert(node.clone(), graph.next_node_index());
|
||||
graph.add_node(node.clone());
|
||||
indices.insert(node.clone(), graph.add_node(node.clone()));
|
||||
}
|
||||
|
||||
for &(ref source, ref target) in edges {
|
||||
|
@ -13,7 +13,7 @@ use hir::def_id::DefId;
|
||||
use hir::map::DefPathHash;
|
||||
use ich::{self, CachingCodemapView};
|
||||
use session::config::DebugInfoLevel::NoDebugInfo;
|
||||
use ty;
|
||||
use ty::TyCtxt;
|
||||
use util::nodemap::{NodeMap, ItemLocalMap};
|
||||
|
||||
use std::hash as std_hash;
|
||||
@ -34,7 +34,7 @@ use rustc_data_structures::accumulate_vec::AccumulateVec;
|
||||
/// a reference to the TyCtxt) and it holds a few caches for speeding up various
|
||||
/// things (e.g. each DefId/DefPath is only hashed once).
|
||||
pub struct StableHashingContext<'a, 'gcx: 'a+'tcx, 'tcx: 'a> {
|
||||
tcx: ty::TyCtxt<'a, 'gcx, 'tcx>,
|
||||
tcx: TyCtxt<'a, 'gcx, 'tcx>,
|
||||
codemap: CachingCodemapView<'gcx>,
|
||||
hash_spans: bool,
|
||||
hash_bodies: bool,
|
||||
@ -53,7 +53,7 @@ pub enum NodeIdHashingMode {
|
||||
|
||||
impl<'a, 'gcx, 'tcx> StableHashingContext<'a, 'gcx, 'tcx> {
|
||||
|
||||
pub fn new(tcx: ty::TyCtxt<'a, 'gcx, 'tcx>) -> Self {
|
||||
pub fn new(tcx: TyCtxt<'a, 'gcx, 'tcx>) -> Self {
|
||||
let hash_spans_initial = tcx.sess.opts.debuginfo != NoDebugInfo;
|
||||
let check_overflow_initial = tcx.sess.overflow_checks();
|
||||
|
||||
@ -111,7 +111,7 @@ impl<'a, 'gcx, 'tcx> StableHashingContext<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn tcx(&self) -> ty::TyCtxt<'a, 'gcx, 'tcx> {
|
||||
pub fn tcx(&self) -> TyCtxt<'a, 'gcx, 'tcx> {
|
||||
self.tcx
|
||||
}
|
||||
|
||||
|
@ -66,7 +66,7 @@ use hir::map as hir_map;
|
||||
use hir::def_id::DefId;
|
||||
use middle::region;
|
||||
use traits::{ObligationCause, ObligationCauseCode};
|
||||
use ty::{self, Region, TyCtxt, TypeFoldable};
|
||||
use ty::{self, Region, Ty, TyCtxt, TypeFoldable};
|
||||
use ty::error::TypeError;
|
||||
use syntax::ast::DUMMY_NODE_ID;
|
||||
use syntax_pos::{Pos, Span};
|
||||
@ -418,7 +418,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
name: String,
|
||||
sub: &ty::subst::Substs<'tcx>,
|
||||
pos: usize,
|
||||
other_ty: &ty::Ty<'tcx>) {
|
||||
other_ty: &Ty<'tcx>) {
|
||||
// `value` and `other_value` hold two incomplete type representation for display.
|
||||
// `name` is the path of both types being compared. `sub`
|
||||
value.push_highlighted(name);
|
||||
@ -491,7 +491,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
path: String,
|
||||
sub: &ty::subst::Substs<'tcx>,
|
||||
other_path: String,
|
||||
other_ty: &ty::Ty<'tcx>) -> Option<()> {
|
||||
other_ty: &Ty<'tcx>) -> Option<()> {
|
||||
for (i, ta) in sub.types().enumerate() {
|
||||
if &ta == other_ty {
|
||||
self.highlight_outer(&mut t1_out, &mut t2_out, path, sub, i, &other_ty);
|
||||
@ -522,7 +522,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
|
||||
/// Compare two given types, eliding parts that are the same between them and highlighting
|
||||
/// relevant differences, and return two representation of those types for highlighted printing.
|
||||
fn cmp(&self, t1: ty::Ty<'tcx>, t2: ty::Ty<'tcx>)
|
||||
fn cmp(&self, t1: Ty<'tcx>, t2: Ty<'tcx>)
|
||||
-> (DiagnosticStyledString, DiagnosticStyledString)
|
||||
{
|
||||
match (&t1.sty, &t2.sty) {
|
||||
@ -743,7 +743,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
|
||||
fn expected_found_str_ty(&self,
|
||||
exp_found: &ty::error::ExpectedFound<ty::Ty<'tcx>>)
|
||||
exp_found: &ty::error::ExpectedFound<Ty<'tcx>>)
|
||||
-> Option<(DiagnosticStyledString, DiagnosticStyledString)> {
|
||||
let exp_found = self.resolve_type_vars_if_possible(exp_found);
|
||||
if exp_found.references_error() {
|
||||
|
@ -12,7 +12,7 @@
|
||||
//! anonymous regions.
|
||||
use hir;
|
||||
use infer::InferCtxt;
|
||||
use ty::{self, Region};
|
||||
use ty::{self, Region, Ty};
|
||||
use hir::def_id::DefId;
|
||||
use hir::map as hir_map;
|
||||
|
||||
@ -35,7 +35,7 @@ pub struct AnonymousArgInfo<'tcx> {
|
||||
// the argument corresponding to the anonymous region
|
||||
pub arg: &'tcx hir::Arg,
|
||||
// the type corresponding to the anonymopus region argument
|
||||
pub arg_ty: ty::Ty<'tcx>,
|
||||
pub arg_ty: Ty<'tcx>,
|
||||
// the ty::BoundRegion corresponding to the anonymous region
|
||||
pub bound_region: ty::BoundRegion,
|
||||
// corresponds to id the argument is the first parameter
|
||||
|
@ -644,7 +644,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn unsolved_variables(&self) -> Vec<ty::Ty<'tcx>> {
|
||||
pub fn unsolved_variables(&self) -> Vec<Ty<'tcx>> {
|
||||
let mut variables = Vec::new();
|
||||
|
||||
let unbound_ty_vars = self.type_variables
|
||||
|
@ -315,7 +315,7 @@ language_item_table! {
|
||||
DebugTraitLangItem, "debug_trait", debug_trait;
|
||||
}
|
||||
|
||||
impl<'a, 'tcx, 'gcx> ty::TyCtxt<'a, 'tcx, 'gcx> {
|
||||
impl<'a, 'tcx, 'gcx> TyCtxt<'a, 'tcx, 'gcx> {
|
||||
pub fn require_lang_item(&self, lang_item: LangItem) -> DefId {
|
||||
self.lang_items().require(lang_item).unwrap_or_else(|msg| {
|
||||
self.sess.fatal(&msg)
|
||||
|
@ -21,7 +21,7 @@ use rustc_data_structures::control_flow_graph::ControlFlowGraph;
|
||||
use hir::def::CtorKind;
|
||||
use hir::def_id::DefId;
|
||||
use ty::subst::{Subst, Substs};
|
||||
use ty::{self, AdtDef, ClosureSubsts, Region, Ty, GeneratorInterior};
|
||||
use ty::{self, AdtDef, ClosureSubsts, Region, Ty, TyCtxt, GeneratorInterior};
|
||||
use ty::fold::{TypeFoldable, TypeFolder, TypeVisitor};
|
||||
use util::ppaux;
|
||||
use rustc_back::slice;
|
||||
@ -644,7 +644,7 @@ impl<'tcx> Terminator<'tcx> {
|
||||
}
|
||||
|
||||
impl<'tcx> TerminatorKind<'tcx> {
|
||||
pub fn if_<'a, 'gcx>(tcx: ty::TyCtxt<'a, 'gcx, 'tcx>, cond: Operand<'tcx>,
|
||||
pub fn if_<'a, 'gcx>(tcx: TyCtxt<'a, 'gcx, 'tcx>, cond: Operand<'tcx>,
|
||||
t: BasicBlock, f: BasicBlock) -> TerminatorKind<'tcx> {
|
||||
static BOOL_SWITCH_FALSE: &'static [ConstInt] = &[ConstInt::U8(0)];
|
||||
TerminatorKind::SwitchInt {
|
||||
@ -1182,7 +1182,7 @@ impl<'tcx> Debug for Operand<'tcx> {
|
||||
|
||||
impl<'tcx> Operand<'tcx> {
|
||||
pub fn function_handle<'a>(
|
||||
tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
def_id: DefId,
|
||||
substs: &'tcx Substs<'tcx>,
|
||||
span: Span,
|
||||
|
@ -381,7 +381,7 @@ pub struct VtableObjectData<'tcx, N> {
|
||||
|
||||
#[derive(Clone, PartialEq, Eq)]
|
||||
pub struct VtableFnPointerData<'tcx, N> {
|
||||
pub fn_ty: ty::Ty<'tcx>,
|
||||
pub fn_ty: Ty<'tcx>,
|
||||
pub nested: Vec<N>
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
use hir::def_id::DefId;
|
||||
use ty::{self, Ty, TypeFoldable, Substs};
|
||||
use ty::{self, Ty, TypeFoldable, Substs, TyCtxt};
|
||||
use util::ppaux;
|
||||
|
||||
use std::fmt;
|
||||
@ -57,12 +57,12 @@ impl<'tcx> InstanceDef<'tcx> {
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn def_ty<'a>(&self, tcx: ty::TyCtxt<'a, 'tcx, 'tcx>) -> Ty<'tcx> {
|
||||
pub fn def_ty<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>) -> Ty<'tcx> {
|
||||
tcx.type_of(self.def_id())
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub fn attrs<'a>(&self, tcx: ty::TyCtxt<'a, 'tcx, 'tcx>) -> ty::Attributes<'tcx> {
|
||||
pub fn attrs<'a>(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>) -> ty::Attributes<'tcx> {
|
||||
tcx.get_attrs(self.def_id())
|
||||
}
|
||||
}
|
||||
@ -103,7 +103,7 @@ impl<'a, 'b, 'tcx> Instance<'tcx> {
|
||||
Instance { def: InstanceDef::Item(def_id), substs: substs }
|
||||
}
|
||||
|
||||
pub fn mono(tcx: ty::TyCtxt<'a, 'tcx, 'b>, def_id: DefId) -> Instance<'tcx> {
|
||||
pub fn mono(tcx: TyCtxt<'a, 'tcx, 'b>, def_id: DefId) -> Instance<'tcx> {
|
||||
Instance::new(def_id, tcx.global_tcx().empty_substs_for_def_id(def_id))
|
||||
}
|
||||
|
||||
|
@ -386,7 +386,7 @@ impl Integer {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_ty<'a, 'tcx>(&self, tcx: &ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
pub fn to_ty<'a, 'tcx>(&self, tcx: &TyCtxt<'a, 'tcx, 'tcx>,
|
||||
signed: bool) -> Ty<'tcx> {
|
||||
match (*self, signed) {
|
||||
(I1, false) => tcx.types.u8,
|
||||
|
@ -16,7 +16,7 @@ use target::{Target, TargetOptions, TargetResult};
|
||||
|
||||
pub fn target() -> TargetResult {
|
||||
let mut base = super::android_base::opts();
|
||||
base.features = "+v7,+thumb2,+vfp3,+d16,-neon".to_string();
|
||||
base.features = "+v7,+thumb-mode,+thumb2,+vfp3,+d16,-neon".to_string();
|
||||
base.max_atomic_width = Some(64);
|
||||
base.pre_link_args
|
||||
.get_mut(&LinkerFlavor::Gcc).unwrap().push("-march=armv7-a".to_string());
|
||||
|
@ -34,7 +34,7 @@ use rustc::middle::mem_categorization::Categorization;
|
||||
use rustc::middle::mem_categorization::ImmutabilityBlame;
|
||||
use rustc::middle::region;
|
||||
use rustc::middle::free_region::RegionRelations;
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
use rustc::ty::{self, Ty, TyCtxt};
|
||||
use rustc::ty::maps::Providers;
|
||||
use rustc_mir::util::borrowck_errors::{BorrowckErrors, Origin};
|
||||
|
||||
@ -275,7 +275,7 @@ impl<'tcx> Loan<'tcx> {
|
||||
#[derive(Eq)]
|
||||
pub struct LoanPath<'tcx> {
|
||||
kind: LoanPathKind<'tcx>,
|
||||
ty: ty::Ty<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
}
|
||||
|
||||
impl<'tcx> PartialEq for LoanPath<'tcx> {
|
||||
@ -299,11 +299,11 @@ pub enum LoanPathKind<'tcx> {
|
||||
}
|
||||
|
||||
impl<'tcx> LoanPath<'tcx> {
|
||||
fn new(kind: LoanPathKind<'tcx>, ty: ty::Ty<'tcx>) -> LoanPath<'tcx> {
|
||||
fn new(kind: LoanPathKind<'tcx>, ty: Ty<'tcx>) -> LoanPath<'tcx> {
|
||||
LoanPath { kind: kind, ty: ty }
|
||||
}
|
||||
|
||||
fn to_type(&self) -> ty::Ty<'tcx> { self.ty }
|
||||
fn to_type(&self) -> Ty<'tcx> { self.ty }
|
||||
}
|
||||
|
||||
// FIXME (pnkfelix): See discussion here
|
||||
|
@ -114,6 +114,13 @@ impl<N: Debug, E: Debug> Graph<N, E> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn with_capacity(nodes: usize, edges: usize) -> Graph<N, E> {
|
||||
Graph {
|
||||
nodes: SnapshotVec::with_capacity(nodes),
|
||||
edges: SnapshotVec::with_capacity(edges),
|
||||
}
|
||||
}
|
||||
|
||||
// # Simple accessors
|
||||
|
||||
#[inline]
|
||||
|
@ -66,6 +66,13 @@ impl<D: SnapshotVecDelegate> SnapshotVec<D> {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn with_capacity(n: usize) -> SnapshotVec<D> {
|
||||
SnapshotVec {
|
||||
values: Vec::with_capacity(n),
|
||||
undo_log: Vec::new(),
|
||||
}
|
||||
}
|
||||
|
||||
fn in_snapshot(&self) -> bool {
|
||||
!self.undo_log.is_empty()
|
||||
}
|
||||
|
@ -85,20 +85,12 @@ impl LintPass for UnusedMut {
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> LateLintPass<'a, 'tcx> for UnusedMut {
|
||||
fn check_expr(&mut self, cx: &LateContext, e: &hir::Expr) {
|
||||
if let hir::ExprMatch(_, ref arms, _) = e.node {
|
||||
for a in arms {
|
||||
self.check_unused_mut_pat(cx, &a.pats)
|
||||
}
|
||||
}
|
||||
fn check_arm(&mut self, cx: &LateContext, a: &hir::Arm) {
|
||||
self.check_unused_mut_pat(cx, &a.pats)
|
||||
}
|
||||
|
||||
fn check_stmt(&mut self, cx: &LateContext, s: &hir::Stmt) {
|
||||
if let hir::StmtDecl(ref d, _) = s.node {
|
||||
if let hir::DeclLocal(ref l) = d.node {
|
||||
self.check_unused_mut_pat(cx, slice::ref_slice(&l.pat));
|
||||
}
|
||||
}
|
||||
fn check_local(&mut self, cx: &LateContext, l: &hir::Local) {
|
||||
self.check_unused_mut_pat(cx, slice::ref_slice(&l.pat));
|
||||
}
|
||||
|
||||
fn check_fn(&mut self,
|
||||
|
@ -14,7 +14,7 @@ use isolated_encoder::IsolatedEncoder;
|
||||
use schema::*;
|
||||
|
||||
use rustc::hir;
|
||||
use rustc::ty;
|
||||
use rustc::ty::{self, TyCtxt};
|
||||
|
||||
#[derive(RustcEncodable, RustcDecodable)]
|
||||
pub struct Ast<'tcx> {
|
||||
@ -59,7 +59,7 @@ impl<'a, 'b, 'tcx> IsolatedEncoder<'a, 'b, 'tcx> {
|
||||
}
|
||||
|
||||
struct NestedBodyCollector<'a, 'tcx: 'a> {
|
||||
tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
bodies_found: Vec<&'tcx hir::Body>,
|
||||
}
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
use build::CFG;
|
||||
use rustc::middle::region;
|
||||
use rustc::mir::*;
|
||||
use rustc::ty;
|
||||
use rustc::ty::TyCtxt;
|
||||
|
||||
impl<'tcx> CFG<'tcx> {
|
||||
pub fn block_data(&self, blk: BasicBlock) -> &BasicBlockData<'tcx> {
|
||||
@ -46,7 +46,7 @@ impl<'tcx> CFG<'tcx> {
|
||||
}
|
||||
|
||||
pub fn push_end_region<'a, 'gcx:'a+'tcx>(&mut self,
|
||||
tcx: ty::TyCtxt<'a, 'gcx, 'tcx>,
|
||||
tcx: TyCtxt<'a, 'gcx, 'tcx>,
|
||||
block: BasicBlock,
|
||||
source_info: SourceInfo,
|
||||
region_scope: region::Scope) {
|
||||
|
@ -22,7 +22,7 @@ use hair::*;
|
||||
use rustc_const_math::{ConstInt, ConstIsize};
|
||||
use rustc::middle::const_val::ConstVal;
|
||||
use rustc::middle::region;
|
||||
use rustc::ty;
|
||||
use rustc::ty::{self, Ty};
|
||||
use rustc::mir::*;
|
||||
use syntax::ast;
|
||||
use syntax_pos::Span;
|
||||
@ -291,7 +291,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
|
||||
pub fn build_binary_op(&mut self, mut block: BasicBlock,
|
||||
op: BinOp, span: Span, ty: ty::Ty<'tcx>,
|
||||
op: BinOp, span: Span, ty: Ty<'tcx>,
|
||||
lhs: Operand<'tcx>, rhs: Operand<'tcx>) -> BlockAnd<Rvalue<'tcx>> {
|
||||
let source_info = self.source_info(span);
|
||||
let bool_ty = self.hir.bool_ty();
|
||||
@ -378,7 +378,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
|
||||
// Helper to get a `-1` value of the appropriate type
|
||||
fn neg_1_literal(&mut self, span: Span, ty: ty::Ty<'tcx>) -> Operand<'tcx> {
|
||||
fn neg_1_literal(&mut self, span: Span, ty: Ty<'tcx>) -> Operand<'tcx> {
|
||||
let literal = match ty.sty {
|
||||
ty::TyInt(ity) => {
|
||||
let val = match ity {
|
||||
@ -410,7 +410,7 @@ impl<'a, 'gcx, 'tcx> Builder<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
|
||||
// Helper to get the minimum value of the appropriate type
|
||||
fn minval_literal(&mut self, span: Span, ty: ty::Ty<'tcx>) -> Operand<'tcx> {
|
||||
fn minval_literal(&mut self, span: Span, ty: Ty<'tcx>) -> Operand<'tcx> {
|
||||
let literal = match ty.sty {
|
||||
ty::TyInt(ity) => {
|
||||
let val = match ity {
|
||||
|
@ -19,7 +19,7 @@ use rustc::mir::{BinOp, BorrowKind, Field, Literal, UnOp};
|
||||
use rustc::hir::def_id::DefId;
|
||||
use rustc::middle::region;
|
||||
use rustc::ty::subst::Substs;
|
||||
use rustc::ty::{self, AdtDef, ClosureSubsts, Region, Ty, GeneratorInterior};
|
||||
use rustc::ty::{AdtDef, ClosureSubsts, Region, Ty, GeneratorInterior};
|
||||
use rustc::hir;
|
||||
use syntax::ast;
|
||||
use syntax_pos::Span;
|
||||
@ -117,7 +117,7 @@ pub enum ExprKind<'tcx> {
|
||||
value: ExprRef<'tcx>,
|
||||
},
|
||||
Call {
|
||||
ty: ty::Ty<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
fun: ExprRef<'tcx>,
|
||||
args: Vec<ExprRef<'tcx>>,
|
||||
},
|
||||
|
@ -14,7 +14,7 @@ use rustc::infer;
|
||||
use rustc::middle::const_val::ConstVal;
|
||||
use rustc::mir::*;
|
||||
use rustc::mir::transform::MirSource;
|
||||
use rustc::ty::{self, Ty};
|
||||
use rustc::ty::{self, Ty, TyCtxt};
|
||||
use rustc::ty::subst::{Kind, Subst, Substs};
|
||||
use rustc::ty::maps::Providers;
|
||||
use rustc_const_math::{ConstInt, ConstUsize};
|
||||
@ -36,7 +36,7 @@ pub fn provide(providers: &mut Providers) {
|
||||
providers.mir_shims = make_shim;
|
||||
}
|
||||
|
||||
fn make_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
fn make_shim<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
instance: ty::InstanceDef<'tcx>)
|
||||
-> &'tcx Mir<'tcx>
|
||||
{
|
||||
@ -154,7 +154,7 @@ fn local_decls_for_sig<'tcx>(sig: &ty::FnSig<'tcx>, span: Span)
|
||||
.collect()
|
||||
}
|
||||
|
||||
fn build_drop_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
fn build_drop_shim<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
def_id: DefId,
|
||||
ty: Option<Ty<'tcx>>)
|
||||
-> Mir<'tcx>
|
||||
@ -235,7 +235,7 @@ fn build_drop_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
pub struct DropShimElaborator<'a, 'tcx: 'a> {
|
||||
pub mir: &'a Mir<'tcx>,
|
||||
pub patch: MirPatch<'tcx>,
|
||||
pub tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
pub tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
pub param_env: ty::ParamEnv<'tcx>,
|
||||
}
|
||||
|
||||
@ -250,7 +250,7 @@ impl<'a, 'tcx> DropElaborator<'a, 'tcx> for DropShimElaborator<'a, 'tcx> {
|
||||
|
||||
fn patch(&mut self) -> &mut MirPatch<'tcx> { &mut self.patch }
|
||||
fn mir(&self) -> &'a Mir<'tcx> { self.mir }
|
||||
fn tcx(&self) -> ty::TyCtxt<'a, 'tcx, 'tcx> { self.tcx }
|
||||
fn tcx(&self) -> TyCtxt<'a, 'tcx, 'tcx> { self.tcx }
|
||||
fn param_env(&self) -> ty::ParamEnv<'tcx> { self.param_env }
|
||||
|
||||
fn drop_style(&self, _path: Self::Path, mode: DropFlagMode) -> DropStyle {
|
||||
@ -280,9 +280,9 @@ impl<'a, 'tcx> DropElaborator<'a, 'tcx> for DropShimElaborator<'a, 'tcx> {
|
||||
}
|
||||
|
||||
/// Build a `Clone::clone` shim for `self_ty`. Here, `def_id` is `Clone::clone`.
|
||||
fn build_clone_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
fn build_clone_shim<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
def_id: DefId,
|
||||
self_ty: ty::Ty<'tcx>)
|
||||
self_ty: Ty<'tcx>)
|
||||
-> Mir<'tcx>
|
||||
{
|
||||
debug!("build_clone_shim(def_id={:?})", def_id);
|
||||
@ -306,7 +306,7 @@ fn build_clone_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
}
|
||||
|
||||
struct CloneShimBuilder<'a, 'tcx: 'a> {
|
||||
tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
def_id: DefId,
|
||||
local_decls: IndexVec<Local, LocalDecl<'tcx>>,
|
||||
blocks: IndexVec<BasicBlock, BasicBlockData<'tcx>>,
|
||||
@ -315,7 +315,7 @@ struct CloneShimBuilder<'a, 'tcx: 'a> {
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
|
||||
fn new(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> Self {
|
||||
fn new(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) -> Self {
|
||||
let sig = tcx.fn_sig(def_id);
|
||||
let sig = tcx.erase_late_bound_regions(&sig);
|
||||
let span = tcx.def_span(def_id);
|
||||
@ -382,7 +382,7 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
|
||||
self.block(vec![ret_statement], TerminatorKind::Return, false);
|
||||
}
|
||||
|
||||
fn make_lvalue(&mut self, mutability: Mutability, ty: ty::Ty<'tcx>) -> Lvalue<'tcx> {
|
||||
fn make_lvalue(&mut self, mutability: Mutability, ty: Ty<'tcx>) -> Lvalue<'tcx> {
|
||||
let span = self.span;
|
||||
Lvalue::Local(
|
||||
self.local_decls.push(temp_decl(mutability, ty, span))
|
||||
@ -391,7 +391,7 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
|
||||
|
||||
fn make_clone_call(
|
||||
&mut self,
|
||||
ty: ty::Ty<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
rcvr_field: Lvalue<'tcx>,
|
||||
next: BasicBlock,
|
||||
cleanup: BasicBlock
|
||||
@ -487,7 +487,7 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
fn array_shim(&mut self, ty: ty::Ty<'tcx>, len: u64) {
|
||||
fn array_shim(&mut self, ty: Ty<'tcx>, len: u64) {
|
||||
let tcx = self.tcx;
|
||||
let span = self.span;
|
||||
let rcvr = Lvalue::Local(Local::new(1+0)).deref();
|
||||
@ -613,7 +613,7 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
|
||||
self.block(vec![], TerminatorKind::Resume, true);
|
||||
}
|
||||
|
||||
fn tuple_shim(&mut self, tys: &ty::Slice<ty::Ty<'tcx>>) {
|
||||
fn tuple_shim(&mut self, tys: &ty::Slice<Ty<'tcx>>) {
|
||||
let rcvr = Lvalue::Local(Local::new(1+0)).deref();
|
||||
|
||||
let mut returns = Vec::new();
|
||||
@ -666,7 +666,7 @@ impl<'a, 'tcx> CloneShimBuilder<'a, 'tcx> {
|
||||
///
|
||||
/// If `untuple_args` is a vec of types, the second argument of the
|
||||
/// function will be untupled as these types.
|
||||
fn build_call_shim<'a, 'tcx>(tcx: ty::TyCtxt<'a, 'tcx, 'tcx>,
|
||||
fn build_call_shim<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
def_id: DefId,
|
||||
rcvr_adjustment: Adjustment,
|
||||
call_kind: CallKind,
|
||||
|
@ -192,7 +192,7 @@ impl<'a, 'b, 'tcx> DropElaborator<'a, 'tcx> for Elaborator<'a, 'b, 'tcx> {
|
||||
self.ctxt.mir
|
||||
}
|
||||
|
||||
fn tcx(&self) -> ty::TyCtxt<'a, 'tcx, 'tcx> {
|
||||
fn tcx(&self) -> TyCtxt<'a, 'tcx, 'tcx> {
|
||||
self.ctxt.tcx
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ use rustc::hir;
|
||||
use rustc::mir::*;
|
||||
use rustc::middle::const_val::{ConstInt, ConstVal};
|
||||
use rustc::middle::lang_items;
|
||||
use rustc::ty::{self, Ty};
|
||||
use rustc::ty::{self, Ty, TyCtxt};
|
||||
use rustc::ty::subst::{Kind, Substs};
|
||||
use rustc::ty::util::IntTypeExt;
|
||||
use rustc_data_structures::indexed_vec::Idx;
|
||||
@ -84,7 +84,7 @@ pub trait DropElaborator<'a, 'tcx: 'a> : fmt::Debug {
|
||||
|
||||
fn patch(&mut self) -> &mut MirPatch<'tcx>;
|
||||
fn mir(&self) -> &'a Mir<'tcx>;
|
||||
fn tcx(&self) -> ty::TyCtxt<'a, 'tcx, 'tcx>;
|
||||
fn tcx(&self) -> TyCtxt<'a, 'tcx, 'tcx>;
|
||||
fn param_env(&self) -> ty::ParamEnv<'tcx>;
|
||||
|
||||
fn drop_style(&self, path: Self::Path, mode: DropFlagMode) -> DropStyle;
|
||||
@ -133,7 +133,7 @@ impl<'l, 'b, 'tcx, D> DropCtxt<'l, 'b, 'tcx, D>
|
||||
lvalue.ty(self.elaborator.mir(), self.tcx()).to_ty(self.tcx())
|
||||
}
|
||||
|
||||
fn tcx(&self) -> ty::TyCtxt<'b, 'tcx, 'tcx> {
|
||||
fn tcx(&self) -> TyCtxt<'b, 'tcx, 'tcx> {
|
||||
self.elaborator.tcx()
|
||||
}
|
||||
|
||||
|
@ -107,14 +107,32 @@ pub fn build_link_meta(incremental_hashes_map: &IncrementalHashesMap) -> LinkMet
|
||||
pub fn get_linker(sess: &Session) -> (String, Command, Vec<(OsString, OsString)>) {
|
||||
let envs = vec![("PATH".into(), command_path(sess))];
|
||||
|
||||
// If our linker looks like a batch script on Windows then to execute this
|
||||
// we'll need to spawn `cmd` explicitly. This is primarily done to handle
|
||||
// emscripten where the linker is `emcc.bat` and needs to be spawned as
|
||||
// `cmd /c emcc.bat ...`.
|
||||
//
|
||||
// This worked historically but is needed manually since #42436 (regression
|
||||
// was tagged as #42791) and some more info can be found on #44443 for
|
||||
// emscripten itself.
|
||||
let cmd = |linker: &str| {
|
||||
if cfg!(windows) && linker.ends_with(".bat") {
|
||||
let mut cmd = Command::new("cmd");
|
||||
cmd.arg("/c").arg(linker);
|
||||
cmd
|
||||
} else {
|
||||
Command::new(linker)
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(ref linker) = sess.opts.cg.linker {
|
||||
(linker.clone(), Command::new(linker), envs)
|
||||
(linker.clone(), cmd(linker), envs)
|
||||
} else if sess.target.target.options.is_like_msvc {
|
||||
let (cmd, envs) = msvc_link_exe_cmd(sess);
|
||||
("link.exe".to_string(), cmd, envs)
|
||||
} else {
|
||||
let linker = &sess.target.target.options.linker;
|
||||
(linker.clone(), Command::new(&linker), envs)
|
||||
(linker.clone(), cmd(linker), envs)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -197,7 +197,7 @@ use rustc::middle::const_val::ConstVal;
|
||||
use rustc::middle::lang_items::{ExchangeMallocFnLangItem};
|
||||
use rustc::traits;
|
||||
use rustc::ty::subst::Substs;
|
||||
use rustc::ty::{self, TypeFoldable, TyCtxt};
|
||||
use rustc::ty::{self, TypeFoldable, Ty, TyCtxt};
|
||||
use rustc::ty::adjustment::CustomCoerceUnsized;
|
||||
use rustc::mir::{self, Location};
|
||||
use rustc::mir::visit::Visitor as MirVisitor;
|
||||
@ -648,7 +648,7 @@ impl<'a, 'tcx> MirVisitor<'tcx> for MirNeighborCollector<'a, 'tcx> {
|
||||
}
|
||||
|
||||
fn visit_drop_use<'a, 'tcx>(scx: &SharedCrateContext<'a, 'tcx>,
|
||||
ty: ty::Ty<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
is_direct_call: bool,
|
||||
output: &mut Vec<TransItem<'tcx>>)
|
||||
{
|
||||
@ -657,7 +657,7 @@ fn visit_drop_use<'a, 'tcx>(scx: &SharedCrateContext<'a, 'tcx>,
|
||||
}
|
||||
|
||||
fn visit_fn_use<'a, 'tcx>(scx: &SharedCrateContext<'a, 'tcx>,
|
||||
ty: ty::Ty<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
is_direct_call: bool,
|
||||
output: &mut Vec<TransItem<'tcx>>)
|
||||
{
|
||||
@ -776,10 +776,10 @@ fn should_trans_locally<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, instance: &Instan
|
||||
/// Finally, there is also the case of custom unsizing coercions, e.g. for
|
||||
/// smart pointers such as `Rc` and `Arc`.
|
||||
fn find_vtable_types_for_unsizing<'a, 'tcx>(scx: &SharedCrateContext<'a, 'tcx>,
|
||||
source_ty: ty::Ty<'tcx>,
|
||||
target_ty: ty::Ty<'tcx>)
|
||||
-> (ty::Ty<'tcx>, ty::Ty<'tcx>) {
|
||||
let ptr_vtable = |inner_source: ty::Ty<'tcx>, inner_target: ty::Ty<'tcx>| {
|
||||
source_ty: Ty<'tcx>,
|
||||
target_ty: Ty<'tcx>)
|
||||
-> (Ty<'tcx>, Ty<'tcx>) {
|
||||
let ptr_vtable = |inner_source: Ty<'tcx>, inner_target: Ty<'tcx>| {
|
||||
if !scx.type_is_sized(inner_source) {
|
||||
(inner_source, inner_target)
|
||||
} else {
|
||||
@ -836,8 +836,8 @@ fn create_fn_trans_item<'a, 'tcx>(instance: Instance<'tcx>) -> TransItem<'tcx> {
|
||||
/// Creates a `TransItem` for each method that is referenced by the vtable for
|
||||
/// the given trait/impl pair.
|
||||
fn create_trans_items_for_vtable_methods<'a, 'tcx>(scx: &SharedCrateContext<'a, 'tcx>,
|
||||
trait_ty: ty::Ty<'tcx>,
|
||||
impl_ty: ty::Ty<'tcx>,
|
||||
trait_ty: Ty<'tcx>,
|
||||
impl_ty: Ty<'tcx>,
|
||||
output: &mut Vec<TransItem<'tcx>>) {
|
||||
assert!(!trait_ty.needs_subst() && !trait_ty.has_escaping_regions() &&
|
||||
!impl_ty.needs_subst() && !impl_ty.has_escaping_regions());
|
||||
|
@ -104,7 +104,7 @@ pub struct LocalCrateContext<'a, 'tcx: 'a> {
|
||||
/// Cache instances of monomorphic and polymorphic items
|
||||
instances: RefCell<FxHashMap<Instance<'tcx>, ValueRef>>,
|
||||
/// Cache generated vtables
|
||||
vtables: RefCell<FxHashMap<(ty::Ty<'tcx>,
|
||||
vtables: RefCell<FxHashMap<(Ty<'tcx>,
|
||||
Option<ty::PolyExistentialTraitRef<'tcx>>), ValueRef>>,
|
||||
/// Cache of constant strings,
|
||||
const_cstr_cache: RefCell<FxHashMap<InternedString, ValueRef>>,
|
||||
@ -512,7 +512,7 @@ impl<'b, 'tcx> CrateContext<'b, 'tcx> {
|
||||
}
|
||||
|
||||
pub fn vtables<'a>(&'a self)
|
||||
-> &'a RefCell<FxHashMap<(ty::Ty<'tcx>,
|
||||
-> &'a RefCell<FxHashMap<(Ty<'tcx>,
|
||||
Option<ty::PolyExistentialTraitRef<'tcx>>), ValueRef>> {
|
||||
&self.local().vtables
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
|
||||
use llvm::{self, ValueRef};
|
||||
use llvm::AttributePlace::Function;
|
||||
use rustc::ty;
|
||||
use rustc::ty::Ty;
|
||||
use rustc::session::config::Sanitizer;
|
||||
use abi::{Abi, FnType};
|
||||
use attributes;
|
||||
@ -119,7 +119,7 @@ pub fn declare_cfn(ccx: &CrateContext, name: &str, fn_type: Type) -> ValueRef {
|
||||
/// If there’s a value with the same name already declared, the function will
|
||||
/// update the declaration and return existing ValueRef instead.
|
||||
pub fn declare_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>, name: &str,
|
||||
fn_type: ty::Ty<'tcx>) -> ValueRef {
|
||||
fn_type: Ty<'tcx>) -> ValueRef {
|
||||
debug!("declare_rust_fn(name={:?}, fn_type={:?})", name, fn_type);
|
||||
let sig = common::ty_fn_sig(ccx, fn_type);
|
||||
let sig = ccx.tcx().erase_late_bound_regions_and_normalize(&sig);
|
||||
@ -164,7 +164,7 @@ pub fn define_global(ccx: &CrateContext, name: &str, ty: Type) -> Option<ValueRe
|
||||
/// can happen with #[no_mangle] or #[export_name], for example.
|
||||
pub fn define_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
||||
name: &str,
|
||||
fn_type: ty::Ty<'tcx>) -> ValueRef {
|
||||
fn_type: Ty<'tcx>) -> ValueRef {
|
||||
if get_defined_value(ccx, name).is_some() {
|
||||
ccx.sess().fatal(&format!("symbol `{}` already defined", name))
|
||||
} else {
|
||||
@ -179,7 +179,7 @@ pub fn define_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
||||
/// can happen with #[no_mangle] or #[export_name], for example.
|
||||
pub fn define_internal_fn<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
||||
name: &str,
|
||||
fn_type: ty::Ty<'tcx>) -> ValueRef {
|
||||
fn_type: Ty<'tcx>) -> ValueRef {
|
||||
let llfn = define_fn(ccx, name, fn_type);
|
||||
unsafe { llvm::LLVMRustSetLinkage(llfn, llvm::Linkage::InternalLinkage) };
|
||||
llfn
|
||||
|
@ -18,7 +18,7 @@ use machine;
|
||||
use monomorphize;
|
||||
use type_::Type;
|
||||
use value::Value;
|
||||
use rustc::ty;
|
||||
use rustc::ty::{self, Ty};
|
||||
|
||||
#[derive(Copy, Clone, Debug)]
|
||||
pub struct VirtualIndex(usize);
|
||||
@ -63,7 +63,7 @@ impl<'a, 'tcx> VirtualIndex {
|
||||
/// making an object `Foo<Trait>` from a value of type `Foo<T>`, then
|
||||
/// `trait_ref` would map `T:Trait`.
|
||||
pub fn get_vtable<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>,
|
||||
ty: ty::Ty<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
trait_ref: Option<ty::PolyExistentialTraitRef<'tcx>>)
|
||||
-> ValueRef
|
||||
{
|
||||
|
@ -11,7 +11,7 @@
|
||||
use llvm::{self, ValueRef, BasicBlockRef};
|
||||
use rustc::middle::lang_items;
|
||||
use rustc::middle::const_val::{ConstEvalErr, ConstInt, ErrKind};
|
||||
use rustc::ty::{self, TypeFoldable};
|
||||
use rustc::ty::{self, Ty, TypeFoldable};
|
||||
use rustc::ty::layout::{self, LayoutTyper};
|
||||
use rustc::mir;
|
||||
use abi::{Abi, FnType, ArgType};
|
||||
@ -119,7 +119,7 @@ impl<'a, 'tcx> MirContext<'a, 'tcx> {
|
||||
fn_ty: FnType<'tcx>,
|
||||
fn_ptr: ValueRef,
|
||||
llargs: &[ValueRef],
|
||||
destination: Option<(ReturnDest, ty::Ty<'tcx>, mir::BasicBlock)>,
|
||||
destination: Option<(ReturnDest, Ty<'tcx>, mir::BasicBlock)>,
|
||||
cleanup: Option<mir::BasicBlock>
|
||||
| {
|
||||
if let Some(cleanup) = cleanup {
|
||||
|
@ -268,7 +268,7 @@ fn ensure_drop_predicates_are_implied_by_item_defn<'a, 'tcx>(
|
||||
///
|
||||
pub fn check_safety_of_destructor_if_necessary<'a, 'gcx, 'tcx>(
|
||||
rcx: &mut RegionCtxt<'a, 'gcx, 'tcx>,
|
||||
ty: ty::Ty<'tcx>,
|
||||
ty: Ty<'tcx>,
|
||||
span: Span,
|
||||
scope: region::Scope)
|
||||
-> Result<(), ErrorReported>
|
||||
|
@ -423,8 +423,8 @@ fn match_intrinsic_type_to_type<'a, 'tcx>(
|
||||
tcx: TyCtxt<'a, 'tcx, 'tcx>,
|
||||
position: &str,
|
||||
span: Span,
|
||||
structural_to_nominal: &mut FxHashMap<&'a intrinsics::Type, ty::Ty<'tcx>>,
|
||||
expected: &'a intrinsics::Type, t: ty::Ty<'tcx>)
|
||||
structural_to_nominal: &mut FxHashMap<&'a intrinsics::Type, Ty<'tcx>>,
|
||||
expected: &'a intrinsics::Type, t: Ty<'tcx>)
|
||||
{
|
||||
use intrinsics::Type::*;
|
||||
|
||||
|
@ -15,7 +15,7 @@ use hir::def::Def;
|
||||
use hir::def_id::DefId;
|
||||
use rustc::ty::subst::Substs;
|
||||
use rustc::traits;
|
||||
use rustc::ty::{self, ToPredicate, ToPolyTraitRef, TraitRef, TypeFoldable};
|
||||
use rustc::ty::{self, Ty, ToPredicate, ToPolyTraitRef, TraitRef, TypeFoldable};
|
||||
use rustc::ty::subst::Subst;
|
||||
use rustc::infer::{self, InferOk};
|
||||
|
||||
@ -102,7 +102,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
pub fn method_exists(&self,
|
||||
span: Span,
|
||||
method_name: ast::Name,
|
||||
self_ty: ty::Ty<'tcx>,
|
||||
self_ty: Ty<'tcx>,
|
||||
call_expr_id: ast::NodeId,
|
||||
allow_private: bool)
|
||||
-> bool {
|
||||
@ -136,7 +136,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
/// * `supplied_method_types`: the explicit method type parameters, if any (`T1..Tn`)
|
||||
/// * `self_expr`: the self expression (`foo`)
|
||||
pub fn lookup_method(&self,
|
||||
self_ty: ty::Ty<'tcx>,
|
||||
self_ty: Ty<'tcx>,
|
||||
segment: &hir::PathSegment,
|
||||
span: Span,
|
||||
call_expr: &'gcx hir::Expr,
|
||||
@ -206,7 +206,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
fn lookup_probe(&self,
|
||||
span: Span,
|
||||
method_name: ast::Name,
|
||||
self_ty: ty::Ty<'tcx>,
|
||||
self_ty: Ty<'tcx>,
|
||||
call_expr: &'gcx hir::Expr,
|
||||
scope: ProbeScope)
|
||||
-> probe::PickResult<'tcx> {
|
||||
@ -229,8 +229,8 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
span: Span,
|
||||
m_name: ast::Name,
|
||||
trait_def_id: DefId,
|
||||
self_ty: ty::Ty<'tcx>,
|
||||
opt_input_types: Option<&[ty::Ty<'tcx>]>)
|
||||
self_ty: Ty<'tcx>,
|
||||
opt_input_types: Option<&[Ty<'tcx>]>)
|
||||
-> Option<InferOk<'tcx, MethodCallee<'tcx>>> {
|
||||
debug!("lookup_in_trait_adjusted(self_ty={:?}, \
|
||||
m_name={}, trait_def_id={:?})",
|
||||
@ -347,7 +347,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
|
||||
pub fn resolve_ufcs(&self,
|
||||
span: Span,
|
||||
method_name: ast::Name,
|
||||
self_ty: ty::Ty<'tcx>,
|
||||
self_ty: Ty<'tcx>,
|
||||
expr_id: ast::NodeId)
|
||||
-> Result<Def, MethodError<'tcx>> {
|
||||
let mode = probe::Mode::Path;
|
||||
|
@ -45,7 +45,7 @@ use super::FnCtxt;
|
||||
use middle::expr_use_visitor as euv;
|
||||
use middle::mem_categorization as mc;
|
||||
use middle::mem_categorization::Categorization;
|
||||
use rustc::ty::{self, Ty};
|
||||
use rustc::ty::{self, Ty, TyCtxt};
|
||||
use rustc::infer::UpvarRegion;
|
||||
use syntax::ast;
|
||||
use syntax_pos::Span;
|
||||
@ -586,7 +586,7 @@ impl<'a, 'gcx, 'tcx> euv::Delegate<'tcx> for InferBorrowKind<'a, 'gcx, 'tcx> {
|
||||
}
|
||||
}
|
||||
|
||||
fn var_name(tcx: ty::TyCtxt, var_hir_id: hir::HirId) -> ast::Name {
|
||||
fn var_name(tcx: TyCtxt, var_hir_id: hir::HirId) -> ast::Name {
|
||||
let var_node_id = tcx.hir.hir_to_node_id(var_hir_id);
|
||||
tcx.hir.name(var_node_id)
|
||||
}
|
||||
|
@ -449,7 +449,7 @@ impl<'a, 'gcx> CheckTypeWellFormedVisitor<'a, 'gcx> {
|
||||
fcx: &FnCtxt<'fcx, 'gcx, 'tcx>,
|
||||
method_sig: &hir::MethodSig,
|
||||
method: &ty::AssociatedItem,
|
||||
self_ty: ty::Ty<'tcx>)
|
||||
self_ty: Ty<'tcx>)
|
||||
{
|
||||
// check that the type of the method's receiver matches the
|
||||
// method's first parameter.
|
||||
|
@ -1580,7 +1580,7 @@ pub enum SizedByDefault { Yes, No, }
|
||||
/// a region) to ty's notion of ty param bounds, which can either be user-defined traits, or the
|
||||
/// built-in trait (formerly known as kind): Send.
|
||||
pub fn compute_bounds<'gcx: 'tcx, 'tcx>(astconv: &AstConv<'gcx, 'tcx>,
|
||||
param_ty: ty::Ty<'tcx>,
|
||||
param_ty: Ty<'tcx>,
|
||||
ast_bounds: &[hir::TyParamBound],
|
||||
sized_by_default: SizedByDefault,
|
||||
span: Span)
|
||||
@ -1673,7 +1673,7 @@ fn compute_sig_of_foreign_fn_decl<'a, 'tcx>(
|
||||
// ABIs are handled at all correctly.
|
||||
if abi != abi::Abi::RustIntrinsic && abi != abi::Abi::PlatformIntrinsic
|
||||
&& !tcx.sess.features.borrow().simd_ffi {
|
||||
let check = |ast_ty: &hir::Ty, ty: ty::Ty| {
|
||||
let check = |ast_ty: &hir::Ty, ty: Ty| {
|
||||
if ty.is_simd() {
|
||||
tcx.sess.struct_span_err(ast_ty.span,
|
||||
&format!("use of SIMD type `{}` in FFI is highly experimental and \
|
||||
|
@ -8,7 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use rustc::ty::{self, Ty};
|
||||
use rustc::ty::{self, Ty, TyCtxt};
|
||||
use rustc::ty::fold::{TypeFoldable, TypeVisitor};
|
||||
use rustc::util::nodemap::FxHashSet;
|
||||
|
||||
@ -86,7 +86,7 @@ impl<'tcx> TypeVisitor<'tcx> for ParameterCollector {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn identify_constrained_type_params<'tcx>(tcx: ty::TyCtxt,
|
||||
pub fn identify_constrained_type_params<'tcx>(tcx: TyCtxt,
|
||||
predicates: &[ty::Predicate<'tcx>],
|
||||
impl_trait_ref: Option<ty::TraitRef<'tcx>>,
|
||||
input_parameters: &mut FxHashSet<Parameter>)
|
||||
@ -136,7 +136,7 @@ pub fn identify_constrained_type_params<'tcx>(tcx: ty::TyCtxt,
|
||||
/// which is determined by 1, which requires `U`, that is determined
|
||||
/// by 0. I should probably pick a less tangled example, but I can't
|
||||
/// think of any.
|
||||
pub fn setup_constraining_predicates<'tcx>(tcx: ty::TyCtxt,
|
||||
pub fn setup_constraining_predicates<'tcx>(tcx: TyCtxt,
|
||||
predicates: &mut [ty::Predicate<'tcx>],
|
||||
impl_trait_ref: Option<ty::TraitRef<'tcx>>,
|
||||
input_parameters: &mut FxHashSet<Parameter>)
|
||||
|
@ -35,7 +35,7 @@ use rustc::hir::def::{Def, CtorKind};
|
||||
use rustc::hir::def_id::{CrateNum, DefId, CRATE_DEF_INDEX, LOCAL_CRATE};
|
||||
use rustc::traits::Reveal;
|
||||
use rustc::ty::subst::Substs;
|
||||
use rustc::ty::{self, AdtKind};
|
||||
use rustc::ty::{self, Ty, AdtKind};
|
||||
use rustc::middle::stability;
|
||||
use rustc::util::nodemap::{FxHashMap, FxHashSet};
|
||||
use rustc_typeck::hir_ty_to_ty;
|
||||
@ -978,7 +978,7 @@ impl<'tcx> Clean<WherePredicate> for ty::OutlivesPredicate<ty::Region<'tcx>, ty:
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<WherePredicate> for ty::OutlivesPredicate<ty::Ty<'tcx>, ty::Region<'tcx>> {
|
||||
impl<'tcx> Clean<WherePredicate> for ty::OutlivesPredicate<Ty<'tcx>, ty::Region<'tcx>> {
|
||||
fn clean(&self, cx: &DocContext) -> WherePredicate {
|
||||
let ty::OutlivesPredicate(ref ty, ref lt) = *self;
|
||||
|
||||
@ -1895,7 +1895,7 @@ impl Clean<Type> for hir::Ty {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'tcx> Clean<Type> for ty::Ty<'tcx> {
|
||||
impl<'tcx> Clean<Type> for Ty<'tcx> {
|
||||
fn clean(&self, cx: &DocContext) -> Type {
|
||||
match self.sty {
|
||||
ty::TyNever => Never,
|
||||
|
@ -588,6 +588,9 @@ impl<K, V, S> HashMap<K, V, S>
|
||||
impl<K: Hash + Eq, V> HashMap<K, V, RandomState> {
|
||||
/// Creates an empty `HashMap`.
|
||||
///
|
||||
/// The hash map is initially created with a capacity of 0, so it will not allocate until it
|
||||
/// is first inserted into.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
|
@ -125,6 +125,9 @@ pub struct HashSet<T, S = RandomState> {
|
||||
impl<T: Hash + Eq> HashSet<T, RandomState> {
|
||||
/// Creates an empty `HashSet`.
|
||||
///
|
||||
/// The hash set is initially created with a capacity of 0, so it will not allocate until it
|
||||
/// is first inserted into.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
#![unstable(feature = "ip", reason = "extra functionality has not been \
|
||||
scrutinized to the level that it should \
|
||||
be stable",
|
||||
be to be stable",
|
||||
issue = "27709")]
|
||||
|
||||
use cmp::Ordering;
|
||||
@ -342,6 +342,42 @@ impl Ipv4Addr {
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates a new IPv4 address with the address pointing to localhost: 127.0.0.1.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ip_constructors)]
|
||||
/// use std::net::Ipv4Addr;
|
||||
///
|
||||
/// let addr = Ipv4Addr::localhost();
|
||||
/// assert_eq!(addr, Ipv4Addr::new(127, 0, 0, 1));
|
||||
/// ```
|
||||
#[unstable(feature = "ip_constructors",
|
||||
reason = "requires greater scrutiny before stabilization",
|
||||
issue = "44582")]
|
||||
pub fn localhost() -> Ipv4Addr {
|
||||
Ipv4Addr::new(127, 0, 0, 1)
|
||||
}
|
||||
|
||||
/// Creates a new IPv4 address representing an unspecified address: 0.0.0.0
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ip_constructors)]
|
||||
/// use std::net::Ipv4Addr;
|
||||
///
|
||||
/// let addr = Ipv4Addr::unspecified();
|
||||
/// assert_eq!(addr, Ipv4Addr::new(0, 0, 0, 0));
|
||||
/// ```
|
||||
#[unstable(feature = "ip_constructors",
|
||||
reason = "requires greater scrutiny before stabilization",
|
||||
issue = "44582")]
|
||||
pub fn unspecified() -> Ipv4Addr {
|
||||
Ipv4Addr::new(0, 0, 0, 0)
|
||||
}
|
||||
|
||||
/// Returns the four eight-bit integers that make up this address.
|
||||
///
|
||||
/// # Examples
|
||||
@ -788,6 +824,42 @@ impl Ipv6Addr {
|
||||
Ipv6Addr { inner: addr }
|
||||
}
|
||||
|
||||
/// Creates a new IPv6 address representing localhost: `::1`.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ip_constructors)]
|
||||
/// use std::net::Ipv6Addr;
|
||||
///
|
||||
/// let addr = Ipv6Addr::localhost();
|
||||
/// assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
|
||||
/// ```
|
||||
#[unstable(feature = "ip_constructors",
|
||||
reason = "requires greater scrutiny before stabilization",
|
||||
issue = "44582")]
|
||||
pub fn localhost() -> Ipv6Addr {
|
||||
Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1)
|
||||
}
|
||||
|
||||
/// Creates a new IPv6 address representing the unspecified address: `::`
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(ip_constructors)]
|
||||
/// use std::net::Ipv6Addr;
|
||||
///
|
||||
/// let addr = Ipv6Addr::unspecified();
|
||||
/// assert_eq!(addr, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
|
||||
/// ```
|
||||
#[unstable(feature = "ip_constructors",
|
||||
reason = "requires greater scrutiny before stabilization",
|
||||
issue = "44582")]
|
||||
pub fn unspecified() -> Ipv6Addr {
|
||||
Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0)
|
||||
}
|
||||
|
||||
/// Returns the eight 16-bit segments that make up this address.
|
||||
///
|
||||
/// # Examples
|
||||
@ -1681,6 +1753,22 @@ mod tests {
|
||||
assert_eq!(Ipv6Addr::from(0x112233445566778899aabbccddeeff11u128), a);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ipv4_from_constructors() {
|
||||
assert_eq!(Ipv4Addr::localhost(), Ipv4Addr::new(127, 0, 0, 1));
|
||||
assert!(Ipv4Addr::localhost().is_loopback());
|
||||
assert_eq!(Ipv4Addr::unspecified(), Ipv4Addr::new(0, 0, 0, 0));
|
||||
assert!(Ipv4Addr::unspecified().is_unspecified());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ipv6_from_contructors() {
|
||||
assert_eq!(Ipv6Addr::localhost(), Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
|
||||
assert!(Ipv6Addr::localhost().is_loopback());
|
||||
assert_eq!(Ipv6Addr::unspecified(), Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
|
||||
assert!(Ipv6Addr::unspecified().is_unspecified());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ipv4_from_octets() {
|
||||
assert_eq!(Ipv4Addr::from([127, 0, 0, 1]), Ipv4Addr::new(127, 0, 0, 1))
|
||||
|
@ -110,3 +110,11 @@ fn foo(mut a: isize) {
|
||||
let mut a = 3;
|
||||
let mut b = vec![2];
|
||||
}
|
||||
|
||||
// make sure the lint attribute can be turned off on let statements
|
||||
#[deny(unused_mut)]
|
||||
fn bar() {
|
||||
#[allow(unused_mut)]
|
||||
let mut a = 3;
|
||||
let mut b = vec![2]; //~ ERROR: variable does not need to be mutable
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit adea17e1b22231a9036a619264b72565e3a3962f
|
||||
Subproject commit 0ddd53c4bc2a76df565a1c1fc0cc6f19f254b51e
|
Loading…
Reference in New Issue
Block a user