Skip to content

Commit

Permalink
Auto merge of rust-lang#131848 - matthiaskrgr:rollup-l29a75j, r=matth…
Browse files Browse the repository at this point in the history
…iaskrgr

Rollup of 7 pull requests

Successful merges:

 - rust-lang#129620 (Provide a more convinient way of developing rustc on NixOS)
 - rust-lang#131805 (rustc_llvm: Fix flattened CLI args)
 - rust-lang#131818 (Enable XRay instrumentation for LoongArch Linux targets)
 - rust-lang#131825 (SolverDelegate add assoc type for Infcx)
 - rust-lang#131833 (Add `must_use` to `CommandExt::exec`)
 - rust-lang#131835 (Do not run test where it cannot run)
 - rust-lang#131844 (Add mailmap entry for kobzol)

r? `@ghost`
`@rustbot` modify labels: rollup
  • Loading branch information
bors committed Oct 17, 2024
2 parents 86bd459 + c9f3a7d commit 3ed6e3c
Show file tree
Hide file tree
Showing 17 changed files with 157 additions and 10 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ build/
/src/tools/x/target
# Created by default with `src/ci/docker/run.sh`
/obj/
# Created by nix dev shell / .envrc
src/tools/nix-dev-shell/flake.lock

## ICE reports
rustc-ice-*.txt
Expand Down
1 change: 1 addition & 0 deletions .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,7 @@ Jakub Adam Wieczorek <[email protected]>
Jakub Adam Wieczorek <[email protected]> <[email protected]>
Jakub Adam Wieczorek <[email protected]> <[email protected]>
Jakub Adam Wieczorek <[email protected]> <[email protected]>
Jakub Beránek <[email protected]> <[email protected]>
James [Undefined] <[email protected]>
James Deng <[email protected]> <[email protected]>
James Hinshelwood <[email protected]> <[email protected]>
Expand Down
6 changes: 3 additions & 3 deletions compiler/rustc_llvm/llvm-wrapper/PassWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -490,13 +490,13 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
assert(ArgsCstrBuff[ArgsCstrBuffLen - 1] == '\0');
auto Arg0 = std::string(ArgsCstrBuff);
buffer_offset = Arg0.size() + 1;
auto ArgsCppStr =
std::string(ArgsCstrBuff + buffer_offset, ArgsCstrBuffLen - 1);
auto ArgsCppStr = std::string(ArgsCstrBuff + buffer_offset,
ArgsCstrBuffLen - buffer_offset);
auto i = 0;
while (i != std::string::npos) {
i = ArgsCppStr.find('\0', i + 1);
if (i != std::string::npos)
ArgsCppStr.replace(i, i + 1, " ");
ArgsCppStr.replace(i, 1, " ");
}
Options.MCOptions.Argv0 = Arg0;
Options.MCOptions.CommandlineArgs = ArgsCppStr;
Expand Down
5 changes: 2 additions & 3 deletions compiler/rustc_next_trait_solver/src/delegate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,8 @@ use rustc_type_ir::fold::TypeFoldable;
use rustc_type_ir::solve::{Certainty, Goal, NoSolution, SolverMode};
use rustc_type_ir::{self as ty, InferCtxtLike, Interner};

pub trait SolverDelegate:
Deref<Target: InferCtxtLike<Interner = <Self as SolverDelegate>::Interner>> + Sized
{
pub trait SolverDelegate: Deref<Target = <Self as SolverDelegate>::Infcx> + Sized {
type Infcx: InferCtxtLike<Interner = <Self as SolverDelegate>::Interner>;
type Interner: Interner;
fn cx(&self) -> Self::Interner {
(**self).cx()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ pub(crate) fn target() -> Target {
| SanitizerSet::LEAK
| SanitizerSet::MEMORY
| SanitizerSet::THREAD,
supports_xray: true,
direct_access_external_data: Some(false),
..base::linux_gnu::opts()
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ pub(crate) fn target() -> Target {
| SanitizerSet::LEAK
| SanitizerSet::MEMORY
| SanitizerSet::THREAD,
supports_xray: true,
direct_access_external_data: Some(false),
..base::linux_musl::opts()
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ pub(crate) fn target() -> Target {
| SanitizerSet::LEAK
| SanitizerSet::MEMORY
| SanitizerSet::THREAD,
supports_xray: true,
direct_access_external_data: Some(false),
..base::linux_ohos::opts()
},
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_trait_selection/src/solve/delegate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ impl<'tcx> Deref for SolverDelegate<'tcx> {
}

impl<'tcx> rustc_next_trait_solver::delegate::SolverDelegate for SolverDelegate<'tcx> {
type Infcx = InferCtxt<'tcx>;
type Interner = TyCtxt<'tcx>;

fn cx(&self) -> TyCtxt<'tcx> {
Expand Down
1 change: 1 addition & 0 deletions library/core/tests/lazy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ fn lazy_type_inference() {
}

#[test]
#[cfg(panic = "unwind")]
#[should_panic = "LazyCell instance has previously been poisoned"]
fn lazy_force_mut_panic() {
let mut lazy = LazyCell::<String>::new(|| panic!());
Expand Down
1 change: 1 addition & 0 deletions library/std/src/os/unix/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,7 @@ pub trait CommandExt: Sealed {
/// required to gracefully handle errors it is recommended to use the
/// cross-platform `spawn` instead.
#[stable(feature = "process_exec2", since = "1.9.0")]
#[must_use]
fn exec(&mut self) -> io::Error;

/// Set executable argument
Expand Down
8 changes: 8 additions & 0 deletions src/tools/nix-dev-shell/envrc-flake
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# If you want to use this as an .envrc file to create a shell with necessery components
# to develop rustc, use the following command in the root of the rusr checkout:
#
# ln -s ./src/tools/nix-dev-shell/envrc-flake ./.envrc && echo .envrc >> .git/info/exclude

if nix flake show path:./src/tools/nix-dev-shell &> /dev/null; then
use flake path:./src/tools/nix-dev-shell
fi
7 changes: 7 additions & 0 deletions src/tools/nix-dev-shell/envrc-shell
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# If you want to use this as an .envrc file to create a shell with necessery components
# to develop rustc, use the following command in the root of the rusr checkout:
#
# ln -s ./src/tools/nix-dev-shell/envrc-shell ./.envrc && echo .envrc >> .git/info/exclude

use nix ./src/tools/nix-dev-shell/shell.nix

33 changes: 33 additions & 0 deletions src/tools/nix-dev-shell/flake.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
description = "rustc dev shell";

inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};

outputs = { self, nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
x = import ./x { inherit pkgs; };
in
{
devShells.default = with pkgs; mkShell {
name = "rustc-dev-shell";
nativeBuildInputs = with pkgs; [
binutils cmake ninja pkg-config python3 git curl cacert patchelf nix
];
buildInputs = with pkgs; [
openssl glibc.out glibc.static x
];
# Avoid creating text files for ICEs.
RUSTC_ICE = "0";
# Provide `libstdc++.so.6` for the self-contained lld.
LD_LIBRARY_PATH = "${with pkgs; lib.makeLibraryPath [
stdenv.cc.cc.lib
]}";
};
}
);
}
19 changes: 19 additions & 0 deletions src/tools/nix-dev-shell/shell.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{ pkgs ? import <nixpkgs> {} }:
let
x = import ./x { inherit pkgs; };
in
pkgs.mkShell {
name = "rustc";
nativeBuildInputs = with pkgs; [
binutils cmake ninja pkg-config python3 git curl cacert patchelf nix
];
buildInputs = with pkgs; [
openssl glibc.out glibc.static x
];
# Avoid creating text files for ICEs.
RUSTC_ICE = "0";
# Provide `libstdc++.so.6` for the self-contained lld.
LD_LIBRARY_PATH = "${with pkgs; lib.makeLibraryPath [
stdenv.cc.cc.lib
]}";
}
22 changes: 22 additions & 0 deletions src/tools/nix-dev-shell/x/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
pkgs ? import <nixpkgs> { },
}:
pkgs.stdenv.mkDerivation {
name = "x";

src = ./x.rs;
dontUnpack = true;

nativeBuildInputs = with pkgs; [ rustc ];

buildPhase = ''
PYTHON=${pkgs.lib.getExe pkgs.python3} rustc -Copt-level=3 --crate-name x $src --out-dir $out/bin
'';

meta = with pkgs.lib; {
description = "Helper for rust-lang/rust x.py";
homepage = "https://github.com/rust-lang/rust/blob/master/src/tools/x";
license = licenses.mit;
mainProgram = "x";
};
}
50 changes: 50 additions & 0 deletions src/tools/nix-dev-shell/x/x.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// git clone https://github.com/rust-lang/rust/blob/0ea7ddcc35a2fcaa5da8a7dcfc118c9fb4a63b95/src/tools/x/src/main.rs
// patched to stop doing python probing, stop the probe, please dont, i have a python
//! Run bootstrap from any subdirectory of a rust compiler checkout.
//!
//! We prefer `exec`, to avoid adding an extra process in the process tree.
//! However, since `exec` isn't available on Windows, we indirect through
//! `exec_or_status`, which will call `exec` on unix and `status` on Windows.
//!
//! We use `powershell.exe x.ps1` on Windows, and `sh -c x` on Unix, those are
//! the ones that call `x.py`. We use `sh -c` on Unix, because it is a standard.
//! We also don't use `pwsh` on Windows, because it is not installed by default;

use std::env;
use std::os::unix::process::CommandExt;
use std::process::{self, Command};

fn main() {
match env::args().skip(1).next().as_deref() {
Some("--wrapper-version") => {
println!("0.1.0");
return;
}
_ => {}
}
let current = match env::current_dir() {
Ok(dir) => dir,
Err(err) => {
eprintln!("Failed to get current directory: {err}");
process::exit(1);
}
};

for dir in current.ancestors() {
let candidate = dir.join("x.py");
if candidate.exists() {
let mut cmd = Command::new(env!("PYTHON"));
cmd.arg(dir.join("x.py"));
cmd.args(env::args().skip(1)).current_dir(dir);

let error = cmd.exec();
eprintln!("Failed to invoke `{:?}`: {}", cmd, error);
}
}

eprintln!(
"x.py not found. Please run inside of a checkout of `https://github.com/rust-lang/rust`."
);

process::exit(1);
}
8 changes: 4 additions & 4 deletions tests/ui/command/command-exec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,23 +26,23 @@ fn main() {
}

"exec-test2" => {
Command::new("/path/to/nowhere").exec();
let _ = Command::new("/path/to/nowhere").exec();
println!("passed");
}

"exec-test3" => {
Command::new(&me).arg("bad\0").exec();
let _ = Command::new(&me).arg("bad\0").exec();
println!("passed");
}

"exec-test4" => {
Command::new(&me).current_dir("/path/to/nowhere").exec();
let _ = Command::new(&me).current_dir("/path/to/nowhere").exec();
println!("passed");
}

"exec-test5" => {
env::set_var("VARIABLE", "ABC");
Command::new("definitely-not-a-real-binary").env("VARIABLE", "XYZ").exec();
let _ = Command::new("definitely-not-a-real-binary").env("VARIABLE", "XYZ").exec();
assert_eq!(env::var("VARIABLE").unwrap(), "ABC");
println!("passed");
}
Expand Down

0 comments on commit 3ed6e3c

Please sign in to comment.