Skip to content

Commit

Permalink
Rollup merge of rust-lang#133951 - bjorn3:wasm_c_abi_lint_hard_error,…
Browse files Browse the repository at this point in the history
… r=workingjubilee

Make the wasm_c_abi future compat warning a hard error

This is the next step in getting rid of the broken C abi for wasm32-unknown-unknown.

The lint was made deny-by-default in rust-lang#129534 3 months ago. This still keeps the `-Zwasm-c-abi` flag set to `legacy` by default. It will be flipped in a future PR.

cc rust-lang#122532
  • Loading branch information
matthiaskrgr authored Jan 26, 2025
2 parents 8e74ff4 + 49c3aaa commit 9004ed7
Show file tree
Hide file tree
Showing 11 changed files with 55 additions and 54 deletions.
3 changes: 0 additions & 3 deletions compiler/rustc_lint/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -976,6 +976,3 @@ lint_uses_power_alignment = repr(C) does not follow the power alignment rule. Th
lint_variant_size_differences =
enum variant is more than three times larger ({$largest} bytes) than the next largest
lint_wasm_c_abi =
older versions of the `wasm-bindgen` crate will be incompatible with future versions of Rust; please update to `wasm-bindgen` v0.2.88
1 change: 0 additions & 1 deletion compiler/rustc_lint/src/early/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -430,7 +430,6 @@ pub(super) fn decorate_lint(
BuiltinLintDiag::UnusedCrateDependency { extern_crate, local_crate } => {
lints::UnusedCrateDependency { extern_crate, local_crate }.decorate_lint(diag)
}
BuiltinLintDiag::WasmCAbi => lints::WasmCAbi.decorate_lint(diag),
BuiltinLintDiag::IllFormedAttributeInput { suggestions } => {
lints::IllFormedAttributeInput {
num_suggestions: suggestions.len(),
Expand Down
4 changes: 0 additions & 4 deletions compiler/rustc_lint/src/lints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2566,10 +2566,6 @@ pub(crate) struct UnusedCrateDependency {
pub local_crate: Symbol,
}

#[derive(LintDiagnostic)]
#[diag(lint_wasm_c_abi)]
pub(crate) struct WasmCAbi;

#[derive(LintDiagnostic)]
#[diag(lint_ill_formed_attribute_input)]
pub(crate) struct IllFormedAttributeInput {
Expand Down
39 changes: 0 additions & 39 deletions compiler/rustc_lint_defs/src/builtin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,6 @@ declare_lint_pass! {
UNUSED_VARIABLES,
USELESS_DEPRECATED,
WARNINGS,
WASM_C_ABI,
// tidy-alphabetical-end
]
}
Expand Down Expand Up @@ -4681,44 +4680,6 @@ declare_lint! {
};
}

declare_lint! {
/// The `wasm_c_abi` lint detects crate dependencies that are incompatible
/// with future versions of Rust that will emit spec-compliant C ABI.
///
/// ### Example
///
/// ```rust,ignore (needs extern crate)
/// #![deny(wasm_c_abi)]
/// ```
///
/// This will produce:
///
/// ```text
/// error: the following packages contain code that will be rejected by a future version of Rust: wasm-bindgen v0.2.87
/// |
/// note: the lint level is defined here
/// --> src/lib.rs:1:9
/// |
/// 1 | #![deny(wasm_c_abi)]
/// | ^^^^^^^^^^
/// ```
///
/// ### Explanation
///
/// Rust has historically emitted non-spec-compliant C ABI. This has caused
/// incompatibilities between other compilers and Wasm targets. In a future
/// version of Rust this will be fixed and therefore dependencies relying
/// on the non-spec-compliant C ABI will stop functioning.
pub WASM_C_ABI,
Deny,
"detects dependencies that are incompatible with the Wasm C ABI",
@future_incompatible = FutureIncompatibleInfo {
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
reference: "issue #71871 <https://github.com/rust-lang/rust/issues/71871>",
};
crate_level_only
}

declare_lint! {
/// The `uncovered_param_in_projection` lint detects a violation of one of Rust's orphan rules for
/// foreign trait implementations that concerns the use of type parameters inside trait associated
Expand Down
1 change: 0 additions & 1 deletion compiler/rustc_lint_defs/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -795,7 +795,6 @@ pub enum BuiltinLintDiag {
extern_crate: Symbol,
local_crate: Symbol,
},
WasmCAbi,
IllFormedAttributeInput {
suggestions: Vec<String>,
},
Expand Down
3 changes: 3 additions & 0 deletions compiler/rustc_metadata/messages.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,9 @@ metadata_unsupported_abi =
metadata_unsupported_abi_i686 =
ABI not supported by `#[link(kind = "raw-dylib")]` on i686
metadata_wasm_c_abi =
older versions of the `wasm-bindgen` crate are incompatible with current versions of Rust; please update to `wasm-bindgen` v0.2.88
metadata_wasm_import_form =
wasm import module must be of the form `wasm_import_module = "string"`
Expand Down
7 changes: 1 addition & 6 deletions compiler/rustc_metadata/src/creader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1076,12 +1076,7 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
// Make a point span rather than covering the whole file
let span = krate.spans.inner_span.shrink_to_lo();

self.sess.psess.buffer_lint(
lint::builtin::WASM_C_ABI,
span,
ast::CRATE_NODE_ID,
BuiltinLintDiag::WasmCAbi,
);
self.sess.dcx().emit_err(errors::WasmCAbi { span });
}
}

Expand Down
7 changes: 7 additions & 0 deletions compiler/rustc_metadata/src/errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -732,3 +732,10 @@ pub struct ImportNameTypeRaw {
#[primary_span]
pub span: Span,
}

#[derive(Diagnostic)]
#[diag(metadata_wasm_c_abi)]
pub(crate) struct WasmCAbi {
#[primary_span]
pub span: Span,
}
28 changes: 28 additions & 0 deletions tests/ui/wasm/wasm-bindgen-broken-error.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
//@ only-wasm32
//@ revisions: v0_1_0 v0_2_87 v0_2_88 v0_3_0 v1_0_0
//@[v0_1_0] check-fail
//@[v0_1_0] rustc-env:CARGO_PKG_VERSION_MAJOR=0
//@[v0_1_0] rustc-env:CARGO_PKG_VERSION_MINOR=1
//@[v0_1_0] rustc-env:CARGO_PKG_VERSION_PATCH=0
//@[v0_2_87] check-fail
//@[v0_2_87] rustc-env:CARGO_PKG_VERSION_MAJOR=0
//@[v0_2_87] rustc-env:CARGO_PKG_VERSION_MINOR=2
//@[v0_2_87] rustc-env:CARGO_PKG_VERSION_PATCH=87
//@[v0_2_88] check-pass
//@[v0_2_88] rustc-env:CARGO_PKG_VERSION_MAJOR=0
//@[v0_2_88] rustc-env:CARGO_PKG_VERSION_MINOR=2
//@[v0_2_88] rustc-env:CARGO_PKG_VERSION_PATCH=88
//@[v0_3_0] check-pass
//@[v0_3_0] rustc-env:CARGO_PKG_VERSION_MAJOR=0
//@[v0_3_0] rustc-env:CARGO_PKG_VERSION_MINOR=3
//@[v0_3_0] rustc-env:CARGO_PKG_VERSION_PATCH=0
//@[v1_0_0] check-pass
//@[v1_0_0] rustc-env:CARGO_PKG_VERSION_MAJOR=1
//@[v1_0_0] rustc-env:CARGO_PKG_VERSION_MINOR=0
//@[v1_0_0] rustc-env:CARGO_PKG_VERSION_PATCH=0

#![crate_name = "wasm_bindgen"]
//[v0_1_0]~^ ERROR: older versions of the `wasm-bindgen` crate
//[v0_2_87]~^^ ERROR: older versions of the `wasm-bindgen` crate

fn main() {}
8 changes: 8 additions & 0 deletions tests/ui/wasm/wasm-bindgen-broken-error.v0_1_0.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: older versions of the `wasm-bindgen` crate are incompatible with current versions of Rust; please update to `wasm-bindgen` v0.2.88
--> $DIR/wasm-bindgen-broken-error.rs:24:1
|
LL | #![crate_name = "wasm_bindgen"]
| ^

error: aborting due to 1 previous error

8 changes: 8 additions & 0 deletions tests/ui/wasm/wasm-bindgen-broken-error.v0_2_87.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: older versions of the `wasm-bindgen` crate are incompatible with current versions of Rust; please update to `wasm-bindgen` v0.2.88
--> $DIR/wasm-bindgen-broken-error.rs:24:1
|
LL | #![crate_name = "wasm_bindgen"]
| ^

error: aborting due to 1 previous error

0 comments on commit 9004ed7

Please sign in to comment.