Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove libc from MSVC targets #124050

Merged
merged 10 commits into from
May 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions library/std/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ addr2line = { version = "0.21.0", optional = true, default-features = false }
[target.'cfg(not(all(windows, target_env = "msvc")))'.dependencies]
libc = { version = "0.2.153", default-features = false, features = ['rustc-dep-of-std'], public = true }

[target.'cfg(all(windows, target_env = "msvc"))'.dependencies]
libc = { version = "0.2.153", default-features = false }

[target.'cfg(all(not(target_os = "aix"), not(all(windows, target_env = "msvc", not(target_vendor = "uwp")))))'.dependencies]
object = { version = "0.32.0", default-features = false, optional = true, features = ['read_core', 'elf', 'macho', 'pe', 'unaligned', 'archive'] }

Expand Down
1 change: 1 addition & 0 deletions library/std/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -435,6 +435,7 @@ extern crate alloc as alloc_crate;
// so include it here even if it's unused.
#[doc(masked)]
#[allow(unused_extern_crates)]
#[cfg(not(all(windows, target_env = "msvc")))]
extern crate libc;

// We always need an unwinder currently for backtraces
Expand Down
2 changes: 2 additions & 0 deletions library/std/src/os/raw/tests.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#![cfg(not(all(windows, target_env = "msvc")))]

use crate::any::TypeId;

macro_rules! ok {
Expand Down
27 changes: 5 additions & 22 deletions tests/incremental/foreign.rs
Original file line number Diff line number Diff line change
@@ -1,38 +1,21 @@
// Test what happens we save incremental compilation state that makes
// use of foreign items. This used to ICE (#34991).
//@ ignore-sgx no libc

//@ revisions: rpass1

#![feature(rustc_private)]

extern crate libc;

use std::ffi::CString;

mod mlibc {
use libc::{c_char, c_long, c_longlong};

extern "C" {
pub fn atol(x: *const c_char) -> c_long;
pub fn atoll(x: *const c_char) -> c_longlong;
// strlen is provided either by an external library or compiler-builtins as a fallback
pub fn strlen(x: *const std::ffi::c_char) -> usize;
}
}

fn atol(s: String) -> isize {
let c = CString::new(s).unwrap();
unsafe { mlibc::atol(c.as_ptr()) as isize }
}

fn atoll(s: String) -> i64 {
fn strlen(s: String) -> usize {
let c = CString::new(s).unwrap();
unsafe { mlibc::atoll(c.as_ptr()) as i64 }
unsafe { mlibc::strlen(c.as_ptr()) }
}

pub fn main() {
assert_eq!(atol("1024".to_string()) * 10, atol("10240".to_string()));
assert_eq!(
(atoll("11111111111111111".to_string()) * 10),
atoll("111111111111111110".to_string())
);
assert_eq!(strlen("1024".to_string()), strlen("2048".to_string()));
}
5 changes: 1 addition & 4 deletions tests/run-make/c-link-to-rust-va-list-fn/checkrust.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
#![crate_type = "staticlib"]
#![feature(c_variadic)]
#![feature(rustc_private)]

extern crate libc;

use libc::{c_char, c_double, c_int, c_long, c_longlong};
use std::ffi::{c_char, c_double, c_int, c_long, c_longlong};
use std::ffi::VaList;
use std::ffi::{CString, CStr};

Expand Down
6 changes: 2 additions & 4 deletions tests/run-make/link-path-order/main.rs
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
#![feature(rustc_private)]

extern crate libc;
use std::ffi::c_int;

#[link(name = "foo", kind = "static")]
extern "C" {
fn should_return_one() -> libc::c_int;
fn should_return_one() -> c_int;
}

fn main() {
Expand Down
14 changes: 4 additions & 10 deletions tests/ui/env-null-vars.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,15 @@
// Ensure that env::vars() does not panic if environ is null.
// Regression test for rust-lang/rust#53200
//@ run-pass

#![allow(unused_imports)]

//@ ignore-windows

// issue-53200

#![feature(rustc_private)]
extern crate libc;

use std::env;

// FIXME: more platforms?
#[cfg(target_os = "linux")]
fn main() {
extern crate libc;
unsafe { libc::clearenv(); }
assert_eq!(env::vars().count(), 0);
assert_eq!(std::env::vars().count(), 0);
}

#[cfg(not(target_os = "linux"))]
Expand Down
4 changes: 2 additions & 2 deletions tests/ui/error-codes/E0259.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#![feature(rustc_private)]
#![feature(test)]

extern crate alloc;

extern crate libc as alloc;
extern crate test as alloc;
//~^ ERROR E0259

fn main() {}
4 changes: 2 additions & 2 deletions tests/ui/error-codes/E0259.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@ error[E0259]: the name `alloc` is defined multiple times
LL | extern crate alloc;
| ------------------- previous import of the extern crate `alloc` here
LL |
LL | extern crate libc as alloc;
LL | extern crate test as alloc;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `alloc` reimported here
|
= note: `alloc` must be defined only once in the type namespace of this module
help: you can use `as` to change the binding name of the import
|
LL | extern crate libc as other_alloc;
LL | extern crate test as other_alloc;
|

error: aborting due to 1 previous error
Expand Down
2 changes: 1 addition & 1 deletion tests/ui/feature-gates/rustc-private.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// gate-test-rustc_private

extern crate libc; //~ ERROR use of unstable library feature 'rustc_private'
extern crate cfg_if; //~ ERROR use of unstable library feature 'rustc_private'

fn main() {}
4 changes: 2 additions & 2 deletions tests/ui/feature-gates/rustc-private.stderr
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
error[E0658]: use of unstable library feature 'rustc_private': this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via `Cargo.toml` instead?
--> $DIR/rustc-private.rs:3:1
|
LL | extern crate libc;
| ^^^^^^^^^^^^^^^^^^
LL | extern crate cfg_if;
| ^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #27812 <https://github.com/rust-lang/rust/issues/27812> for more information
= help: add `#![feature(rustc_private)]` to the crate attributes to enable
Expand Down
10 changes: 2 additions & 8 deletions tests/ui/foreign/foreign-fn-linkname.rs
Original file line number Diff line number Diff line change
@@ -1,20 +1,14 @@
//@ run-pass
//@ ignore-sgx no libc

// Ensure no false positive on "unused extern crate" lint
#![deny(unused_extern_crates)]

#![feature(rustc_private)]

extern crate libc;
use std::ffi::CString;

mod mlibc {
use libc::{c_char, size_t};
use std::ffi::c_char;

extern "C" {
#[link_name = "strlen"]
pub fn my_strlen(str: *const c_char) -> size_t;
pub fn my_strlen(str: *const c_char) -> usize;
}
}

Expand Down
30 changes: 26 additions & 4 deletions tests/ui/foreign/foreign2.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
//@ run-pass
#![allow(dead_code)]
//@ pretty-expanded FIXME #23616
#![feature(rustc_private)]

extern crate libc;
#![allow(dead_code)]
#![feature(rustc_private)]

mod bar {
extern "C" {}
Expand All @@ -13,14 +12,37 @@ mod zed {
extern "C" {}
}

#[cfg(not(windows))]
mod mlibc {
use libc::{c_int, c_void, size_t, ssize_t};
extern crate libc;
use self::libc::{c_int, c_void, size_t, ssize_t};

extern "C" {
pub fn write(fd: c_int, buf: *const c_void, count: size_t) -> ssize_t;
}
}

#[cfg(windows)]
mod mlibc {
#![allow(non_snake_case)]

use std::ffi::c_void;

pub type BOOL = i32;
pub type HANDLE = *mut c_void;

#[link(name = "ntdll")]
extern "system" {
pub fn WriteFile(
hfile: HANDLE,
lpbuffer: *const u8,
nnumberofbytestowrite: u32,
lpnumberofbyteswritten: *mut u32,
lpoverlapped: *mut c_void,
) -> BOOL;
}
}

mod baz {
extern "C" {}
}
Expand Down
4 changes: 2 additions & 2 deletions tests/ui/imports/issue-37887.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
fn main() {
extern crate libc; //~ ERROR use of unstable
use libc::*; //~ ERROR unresolved import
extern crate test; //~ ERROR use of unstable
use test::*; //~ ERROR unresolved import
}
16 changes: 8 additions & 8 deletions tests/ui/imports/issue-37887.stderr
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
error[E0432]: unresolved import `libc`
error[E0432]: unresolved import `test`
--> $DIR/issue-37887.rs:3:9
|
LL | use libc::*;
| ^^^^ maybe a missing crate `libc`?
LL | use test::*;
| ^^^^ maybe a missing crate `test`?
|
= help: consider adding `extern crate libc` to use the `libc` crate
= help: consider adding `extern crate test` to use the `test` crate

error[E0658]: use of unstable library feature 'rustc_private': this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via `Cargo.toml` instead?
error[E0658]: use of unstable library feature 'test'
--> $DIR/issue-37887.rs:2:5
|
LL | extern crate libc;
LL | extern crate test;
| ^^^^^^^^^^^^^^^^^^
|
= note: see issue #27812 <https://github.com/rust-lang/rust/issues/27812> for more information
= help: add `#![feature(rustc_private)]` to the crate attributes to enable
= note: see issue #50297 <https://github.com/rust-lang/rust/issues/50297> for more information
= help: add `#![feature(test)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date

error: aborting due to 2 previous errors
Expand Down
14 changes: 7 additions & 7 deletions tests/ui/lint/unnecessary-extern-crate.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
//@ edition:2018

#![deny(unused_extern_crates)]
#![feature(test, rustc_private)]
#![feature(test)]

extern crate libc;
extern crate core;
//~^ ERROR unused extern crate
//~| HELP remove
extern crate libc as x;
extern crate core as x;
//~^ ERROR unused extern crate
//~| HELP remove

Expand All @@ -28,11 +28,11 @@ mod foo {

pub(super) extern crate alloc as d;

extern crate libc;
extern crate core;
//~^ ERROR unused extern crate
//~| HELP remove

extern crate libc as x;
extern crate core as x;
//~^ ERROR unused extern crate
//~| HELP remove

Expand All @@ -41,11 +41,11 @@ mod foo {
pub extern crate test as y;

mod bar {
extern crate libc;
extern crate core;
//~^ ERROR unused extern crate
//~| HELP remove

extern crate libc as x;
extern crate core as x;
//~^ ERROR unused extern crate
//~| HELP remove

Expand Down
12 changes: 6 additions & 6 deletions tests/ui/lint/unnecessary-extern-crate.stderr
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
error: unused extern crate
--> $DIR/unnecessary-extern-crate.rs:6:1
|
LL | extern crate libc;
LL | extern crate core;
| ^^^^^^^^^^^^^^^^^^ help: remove it
|
note: the lint level is defined here
Expand All @@ -13,31 +13,31 @@ LL | #![deny(unused_extern_crates)]
error: unused extern crate
--> $DIR/unnecessary-extern-crate.rs:9:1
|
LL | extern crate libc as x;
LL | extern crate core as x;
| ^^^^^^^^^^^^^^^^^^^^^^^ help: remove it

error: unused extern crate
--> $DIR/unnecessary-extern-crate.rs:31:5
|
LL | extern crate libc;
LL | extern crate core;
| ^^^^^^^^^^^^^^^^^^ help: remove it

error: unused extern crate
--> $DIR/unnecessary-extern-crate.rs:35:5
|
LL | extern crate libc as x;
LL | extern crate core as x;
| ^^^^^^^^^^^^^^^^^^^^^^^ help: remove it

error: unused extern crate
--> $DIR/unnecessary-extern-crate.rs:44:9
|
LL | extern crate libc;
LL | extern crate core;
| ^^^^^^^^^^^^^^^^^^ help: remove it

error: unused extern crate
--> $DIR/unnecessary-extern-crate.rs:48:9
|
LL | extern crate libc as x;
LL | extern crate core as x;
| ^^^^^^^^^^^^^^^^^^^^^^^ help: remove it

error: aborting due to 6 previous errors
Expand Down
1 change: 1 addition & 0 deletions tests/ui/meta/no_std-extern-libc.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Test that `download-rustc` doesn't put duplicate copies of libc in the sysroot.
//@ check-pass
//@ ignore-windows doesn't necessarily have the libc crate
#![crate_type = "lib"]
#![no_std]
#![feature(rustc_private)]
Expand Down
Loading
Loading