8928de7439
debug_assert to ensure that from_raw_parts is only used properly aligned This does not help nearly as much as I would hope because everybody uses the distributed libstd which is compiled without debug assertions. For this reason, I am not sure if this is even worth it. OTOH, this would have caught the misalignment fixed by https://github.com/rust-lang/rust/issues/42789 *if* there had been any tests actually using ZSTs with alignment >1 (we have a CI runner which has debug assertions in libstd enabled), and it seems to currently [fail in the rg testsuite](https://ci.appveyor.com/project/rust-lang/rust/build/1.0.8403/job/v7dfdcgn8ay5j6sb). So maybe it is worth it, after all. I have seen the attribute `#[rustc_inherit_overflow_checks]` in some places, does that make it so that the *caller's* debug status is relevant? Is there a similar attribute for `debug_assert!`? That could even subsume `rustc_inherit_overflow_checks`: Something like `rustc_inherit_debug_flag` could affect *all* places that change the generated code depending on whether we are in debug or release mode. In fact, given that we have to keep around the MIR for generic functions anyway, is there ever a reason *not* to handle the debug flag that way? I guess currently we apply debug flags like `cfg` so this is dropped early during the MIR pipeline? EDIT: I learned from @eddyb that because of how `debug_assert!` works, this is not realistic. Well, we could still have it for the rustc CI runs and then maybe, eventually, when libstd gets compiled client-side and there is both a debug and a release build... then this will also benefit users.^^
397 lines
14 KiB
YAML
397 lines
14 KiB
YAML
language: shell
|
|
sudo: required
|
|
dist: trusty
|
|
services:
|
|
- docker
|
|
addons:
|
|
apt:
|
|
packages:
|
|
- gdb
|
|
|
|
git:
|
|
depth: 2
|
|
submodules: false
|
|
|
|
matrix:
|
|
fast_finish: true
|
|
include:
|
|
# Images used in testing PR and try-build should be run first.
|
|
- env: IMAGE=x86_64-gnu-llvm-5.0 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 have LLVM assertions
|
|
# turned on, they're deployed to a different location primarily for
|
|
# additional testing.
|
|
- env: IMAGE=dist-x86_64-linux DEPLOY_ALT=1 CI_JOB_NAME=dist-x86_64-linux-alt
|
|
if: branch = try OR branch = auto
|
|
|
|
- env: >
|
|
RUST_CHECK_TARGET=dist
|
|
RUST_CONFIGURE_ARGS="--enable-extended --enable-profiler --enable-lldb"
|
|
SRC=.
|
|
DEPLOY_ALT=1
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
MACOSX_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
CI_JOB_NAME=dist-x86_64-apple-alt
|
|
os: osx
|
|
osx_image: xcode9.3-moar
|
|
if: branch = auto
|
|
|
|
# macOS builders. These are placed near the beginning because they are very
|
|
# slow to run.
|
|
|
|
# OSX builders running tests, these run the full test suite.
|
|
# NO_DEBUG_ASSERTIONS=1 to make them go faster, but also do have some
|
|
# runners that run `//ignore-debug` tests.
|
|
#
|
|
# Note that the compiler is compiled to target 10.8 here because the Xcode
|
|
# version that we're using, 8.2, cannot compile LLVM for OSX 10.7.
|
|
- env: >
|
|
RUST_CHECK_TARGET=check
|
|
RUST_CONFIGURE_ARGS="--build=x86_64-apple-darwin --enable-sanitizers --enable-profiler"
|
|
SRC=.
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
MACOSX_DEPLOYMENT_TARGET=10.8
|
|
MACOSX_STD_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
CI_JOB_NAME=x86_64-apple
|
|
os: osx
|
|
osx_image: xcode9.3-moar
|
|
if: branch = auto
|
|
|
|
- env: >
|
|
RUST_CHECK_TARGET=check
|
|
RUST_CONFIGURE_ARGS=--build=i686-apple-darwin
|
|
SRC=.
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
MACOSX_DEPLOYMENT_TARGET=10.8
|
|
MACOSX_STD_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
CI_JOB_NAME=i686-apple
|
|
os: osx
|
|
osx_image: xcode9.3-moar
|
|
if: branch = auto
|
|
|
|
# OSX builders producing releases. These do not run the full test suite and
|
|
# just produce a bunch of artifacts.
|
|
#
|
|
# Note that these are running in the `xcode7` image instead of the
|
|
# `xcode8.2` image as above. That's because we want to build releases for
|
|
# OSX 10.7 and `xcode7` is the latest Xcode able to compile LLVM for 10.7.
|
|
- env: >
|
|
RUST_CHECK_TARGET=dist
|
|
RUST_CONFIGURE_ARGS="--build=i686-apple-darwin --enable-full-tools --enable-profiler --enable-lldb"
|
|
SRC=.
|
|
DEPLOY=1
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
MACOSX_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
CI_JOB_NAME=dist-i686-apple
|
|
os: osx
|
|
osx_image: xcode9.3-moar
|
|
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-full-tools --enable-sanitizers --enable-profiler --enable-lldb"
|
|
SRC=.
|
|
DEPLOY=1
|
|
RUSTC_RETRY_LINKER_ON_SEGFAULT=1
|
|
MACOSX_DEPLOYMENT_TARGET=10.7
|
|
NO_LLVM_ASSERTIONS=1
|
|
NO_DEBUG_ASSERTIONS=1
|
|
CI_JOB_NAME=dist-x86_64-apple
|
|
os: osx
|
|
osx_image: xcode9.3-moar
|
|
if: branch = auto
|
|
|
|
# Linux builders, remaining docker images
|
|
- env: IMAGE=arm-android
|
|
if: branch = auto
|
|
- env: IMAGE=armhf-gnu
|
|
if: branch = auto
|
|
- env: IMAGE=dist-various-1 DEPLOY=1
|
|
if: branch = auto
|
|
- env: IMAGE=dist-various-2 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-i586-gnu-i586-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-unknown
|
|
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-tools
|
|
if: branch = auto OR (type = pull_request AND commit_message =~ /(?i:^update.*\b(rls|rustfmt|clippy|miri)\b)/)
|
|
- 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=mingw-check
|
|
if: type = pull_request OR branch = auto
|
|
|
|
- stage: publish toolstate
|
|
if: branch = master AND type = push
|
|
before_install: []
|
|
install: []
|
|
sudo: false
|
|
script:
|
|
MESSAGE_FILE=$(mktemp -t msg.XXXXXX);
|
|
. src/ci/docker/x86_64-gnu-tools/repo.sh;
|
|
commit_toolstate_change "$MESSAGE_FILE" "$TRAVIS_BUILD_DIR/src/tools/publish_toolstate.py" "$(git rev-parse HEAD)" "$(git log --format=%s -n1 HEAD)" "$MESSAGE_FILE" "$TOOLSTATE_REPO_ACCESS_TOKEN";
|
|
|
|
env:
|
|
global:
|
|
- 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="
|
|
# TOOLSTATE_REPO_ACCESS_TOKEN=...
|
|
- secure: "ESfcXqv4N2VMhqi2iIyw6da9VrsA78I4iR1asouCaq4hzTTrkB4WNRrfURy6xg72gQ4nMhtRJbB0/2jmc9Cu1+g2CzXtyiL223aJ5CKrXdcvbitopQSDfp07dMWm+UED+hNFEanpErKAeU/6FM3A+J+60PMk8MCF1h9tqNRISJw="
|
|
|
|
before_install:
|
|
# We'll use the AWS cli to download/upload cached docker layers, so install
|
|
# that here.
|
|
- if [ "$TRAVIS_OS_NAME" = linux ]; then
|
|
pip install --user awscli;
|
|
export PATH=$PATH:$HOME/.local/bin;
|
|
fi
|
|
- mkdir -p $HOME/rustsrc
|
|
# FIXME(#46924): these two commands are required to enable IPv6,
|
|
# they shouldn't exist, please revert once more official solutions appeared.
|
|
# see https://github.com/travis-ci/travis-ci/issues/8891#issuecomment-353403729
|
|
- if [ "$TRAVIS_OS_NAME" = linux ]; then
|
|
echo '{"ipv6":true,"fixed-cidr-v6":"fd9a:8454:6789:13f7::/64"}' | sudo tee /etc/docker/daemon.json;
|
|
sudo service docker restart;
|
|
fi
|
|
|
|
install:
|
|
- case "$TRAVIS_OS_NAME" in
|
|
linux)
|
|
travis_retry curl -fo $HOME/stamp https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-03-17-stamp-x86_64-unknown-linux-musl &&
|
|
chmod +x $HOME/stamp &&
|
|
export PATH=$PATH:$HOME
|
|
;;
|
|
osx)
|
|
if [[ "$RUST_CHECK_TARGET" == dist ]]; then
|
|
travis_retry brew update &&
|
|
travis_retry brew install xz &&
|
|
travis_retry brew install swig;
|
|
fi &&
|
|
travis_retry curl -fo /usr/local/bin/sccache https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2018-04-02-sccache-x86_64-apple-darwin &&
|
|
chmod +x /usr/local/bin/sccache &&
|
|
travis_retry curl -fo /usr/local/bin/stamp https://s3-us-west-1.amazonaws.com/rust-lang-ci2/rust-ci-mirror/2017-03-17-stamp-x86_64-apple-darwin &&
|
|
chmod +x /usr/local/bin/stamp &&
|
|
travis_retry curl -f http://releases.llvm.org/6.0.0/clang+llvm-6.0.0-x86_64-apple-darwin.tar.xz | tar xJf - &&
|
|
export CC=`pwd`/clang+llvm-6.0.0-x86_64-apple-darwin/bin/clang &&
|
|
export CXX=`pwd`/clang+llvm-6.0.0-x86_64-apple-darwin/bin/clang++ &&
|
|
export AR=ar
|
|
;;
|
|
esac
|
|
|
|
before_script:
|
|
- >
|
|
echo "#### Disk usage before running script:";
|
|
df -h;
|
|
du . | sort -nr | head -n100
|
|
- >
|
|
RUN_SCRIPT="src/ci/init_repo.sh . $HOME/rustsrc";
|
|
if [ "$TRAVIS_OS_NAME" = "osx" ]; then
|
|
export RUN_SCRIPT="$RUN_SCRIPT && src/ci/run.sh";
|
|
else
|
|
export RUN_SCRIPT="$RUN_SCRIPT && src/ci/docker/run.sh $IMAGE";
|
|
# Enable core dump on Linux.
|
|
sudo sh -c 'echo "/checkout/obj/cores/core.%p.%E" > /proc/sys/kernel/core_pattern';
|
|
fi
|
|
|
|
# Log time information from this machine and an external machine for insight into possible
|
|
# clock drift. Timezones don't matter since relative deltas give all the necessary info.
|
|
script:
|
|
- >
|
|
date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
|
|
- stamp sh -x -c "$RUN_SCRIPT"
|
|
- >
|
|
date && (curl -fs --head https://google.com | grep ^Date: | sed 's/Date: //g' || true)
|
|
|
|
after_success:
|
|
- >
|
|
echo "#### Build successful; Disk usage after running script:";
|
|
df -h;
|
|
du . | sort -nr | head -n100
|
|
|
|
after_failure:
|
|
- >
|
|
echo "#### Build failed; Disk usage after running script:";
|
|
df -h;
|
|
du . | sort -nr | head -n100
|
|
|
|
# Random attempt at debugging currently. Just poking around in here to see if
|
|
# anything shows up.
|
|
|
|
# Dump backtrace for macOS
|
|
- ls -lat $HOME/Library/Logs/DiagnosticReports/
|
|
- find $HOME/Library/Logs/DiagnosticReports
|
|
-type f
|
|
-name '*.crash'
|
|
-not -name '*.stage2-*.crash'
|
|
-not -name 'com.apple.CoreSimulator.CoreSimulatorService-*.crash'
|
|
-exec printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" {} \;
|
|
-exec head -750 {} \;
|
|
-exec echo travis_fold":"end:crashlog \; || true
|
|
|
|
# Dump backtrace for Linux
|
|
- ln -s . checkout &&
|
|
for CORE in obj/cores/core.*; do
|
|
EXE=$(echo $CORE | sed 's|obj/cores/core\.[0-9]*\.!checkout!\(.*\)|\1|;y|!|/|');
|
|
if [ -f "$EXE" ]; then
|
|
printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" "$CORE";
|
|
gdb -q -c "$CORE" "$EXE"
|
|
-iex 'set auto-load off'
|
|
-iex 'dir src/'
|
|
-iex 'set sysroot .'
|
|
-ex bt
|
|
-ex q;
|
|
echo travis_fold":"end:crashlog;
|
|
fi;
|
|
done || true
|
|
|
|
# see #50887
|
|
- cat ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers || true
|
|
|
|
# attempt to debug anything killed by the oom killer on linux, just to see if
|
|
# it happened
|
|
- dmesg | grep -i kill
|
|
|
|
notifications:
|
|
email: false
|
|
|
|
before_deploy:
|
|
- mkdir -p deploy/$TRAVIS_COMMIT
|
|
- >
|
|
if [ "$TRAVIS_OS_NAME" == "osx" ]; then
|
|
rm -rf build/dist/doc &&
|
|
cp -r build/dist/* deploy/$TRAVIS_COMMIT;
|
|
else
|
|
rm -rf obj/build/dist/doc &&
|
|
cp -r obj/build/dist/* deploy/$TRAVIS_COMMIT;
|
|
fi
|
|
- ls -la deploy/$TRAVIS_COMMIT
|
|
|
|
deploy:
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: auto
|
|
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
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds-alt
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: auto
|
|
condition: $DEPLOY_ALT = 1
|
|
|
|
# These two providers are the same as the two above, except deploy on the
|
|
# try branch. Travis does not appear to provide a way to use "or" in these
|
|
# conditions.
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: try
|
|
condition: $DEPLOY = 1
|
|
|
|
- provider: s3
|
|
bucket: rust-lang-ci2
|
|
skip_cleanup: true
|
|
local_dir: deploy
|
|
upload_dir: rustc-builds-alt
|
|
acl: public_read
|
|
region: us-west-1
|
|
access_key_id: AKIAJVBODR3IA4O72THQ
|
|
secret_access_key:
|
|
secure: "kUGd3t7JcVWFESgIlzvsM8viZgCA9Encs3creW0xLJaLSeI1iVjlJK4h/2/nO6y224AFrh/GUfsNr4/4AlxPuYb8OU5oC5Lv+Ff2JiRDYtuNpyQSKAQp+bRYytWMtrmhja91h118Mbm90cUfcLPwkdiINgJNTXhPKg5Cqu3VYn0="
|
|
on:
|
|
branch: try
|
|
condition: $DEPLOY_ALT = 1
|