rust/tests/ui/lint
Matthias Krüger 7d9ed2a864
Rollup merge of #127921 - spastorino:stabilize-unsafe-extern-blocks, r=compiler-errors
Stabilize unsafe extern blocks (RFC 3484)

# Stabilization report

## Summary

This is a tracking issue for the RFC 3484: Unsafe Extern Blocks

We are stabilizing `#![feature(unsafe_extern_blocks)]`, as described in [Unsafe Extern Blocks RFC 3484](https://github.com/rust-lang/rfcs/pull/3484). This feature makes explicit that declaring an extern block is unsafe. Starting in Rust 2024, all extern blocks must be marked as unsafe. In all editions, items within unsafe extern blocks may be marked as safe to use.

RFC: https://github.com/rust-lang/rfcs/pull/3484
Tracking issue: #123743

## What is stabilized

### Summary of stabilization

We now need extern blocks to be marked as unsafe and items inside can also have safety modifiers (unsafe or safe), by default items with no modifiers are unsafe to offer easy migration without surprising results.

```rust
unsafe extern {
    // sqrt (from libm) may be called with any `f64`
    pub safe fn sqrt(x: f64) -> f64;

    // strlen (from libc) requires a valid pointer,
    // so we mark it as being an unsafe fn
    pub unsafe fn strlen(p: *const c_char) -> usize;

    // this function doesn't say safe or unsafe, so it defaults to unsafe
    pub fn free(p: *mut core::ffi::c_void);

    pub safe static IMPORTANT_BYTES: [u8; 256];

    pub safe static LINES: SyncUnsafeCell<i32>;
}
```

## Tests

The relevant tests are in `tests/ui/rust-2024/unsafe-extern-blocks`.

## History

- https://github.com/rust-lang/rust/pull/124482
- https://github.com/rust-lang/rust/pull/124455
- https://github.com/rust-lang/rust/pull/125077
- https://github.com/rust-lang/rust/pull/125522
- https://github.com/rust-lang/rust/issues/126738
- https://github.com/rust-lang/rust/issues/126749
- https://github.com/rust-lang/rust/issues/126755
- https://github.com/rust-lang/rust/pull/126757
- https://github.com/rust-lang/rust/pull/126758
- https://github.com/rust-lang/rust/issues/126756
- https://github.com/rust-lang/rust/pull/126973
- https://github.com/rust-lang/rust/pull/127535
- https://github.com/rust-lang/rustfmt/pull/6204

## Unresolved questions

I am not aware of any unresolved questions.
2024-08-03 20:51:51 +02:00
..
auxiliary
dead-code Bless test fallout 2024-08-03 07:57:31 -04:00
decorate-ice
force-warn
internal
known-tool-in-submodule
large_assignments
let_underscore
must_not_suspend
non-local-defs Switch back non_local_definitions lint to allow-by-default 2024-06-27 08:05:07 +02:00
non-snake-case tests/ui/lint: Move 19 tests to new non-snake-case subdir 2024-06-15 18:18:43 +02:00
redundant-semicolon
rfc-2383-lint-reason RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
rfc-2457-non-ascii-idents
semicolon-in-expressions-from-macros
unknown-lints
unnecessary-qualification
unsafe_code Stabilize unsafe extern blocks (RFC 3484) 2024-07-23 00:29:39 -03:00
unused Introduce REDUNDANT_IMPORTS lint 2024-07-31 00:07:42 -04:00
use-redundant Introduce REDUNDANT_IMPORTS lint 2024-07-31 00:07:42 -04:00
ambiguous_wide_pointer_comparisons_suggestions.fixed
ambiguous_wide_pointer_comparisons_suggestions.rs
ambiguous_wide_pointer_comparisons_suggestions.stderr
anonymous-reexport.rs
anonymous-reexport.stderr
bad-lint-cap2.rs
bad-lint-cap2.stderr
bad-lint-cap3.rs
bad-lint-cap3.stderr
bad-lint-cap.rs
bad-lint-cap.stderr
bare-trait-objects-path.rs
bare-trait-objects-path.stderr
clashing-extern-fn-recursion.rs
clashing-extern-fn-wasm.rs
clashing-extern-fn.rs
clashing-extern-fn.stderr
cli-lint-override.forbid_warn.stderr
cli-lint-override.force_warn_deny.stderr
cli-lint-override.rs
cli-lint-override.warn_deny.stderr
cli-unknown-force-warn.rs
cli-unknown-force-warn.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
command-line-lint-group-allow.rs
command-line-lint-group-deny.rs
command-line-lint-group-deny.stderr
command-line-lint-group-forbid.rs
command-line-lint-group-forbid.stderr
command-line-lint-group-warn.rs
command-line-lint-group-warn.stderr
command-line-register-lint-tool.rs
command-line-register-unknown-lint-tool.rs
command-line-register-unknown-lint-tool.stderr
crate_level_only_lint.rs
crate_level_only_lint.stderr
deny-overflowing-literals.rs
deny-overflowing-literals.stderr
dropping_copy_types-issue-125189-can-not-fixed.rs
dropping_copy_types-issue-125189-can-not-fixed.stderr
dropping_copy_types-issue-125189.fixed
dropping_copy_types-issue-125189.rs
dropping_copy_types-issue-125189.stderr
dropping_copy_types.rs
dropping_copy_types.stderr
dropping_references-can-fixed.fixed
dropping_references-can-fixed.rs
dropping_references-can-fixed.stderr
dropping_references.rs
dropping_references.stderr
empty-lint-attributes.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
enable-unstable-lib-feature.rs
enable-unstable-lib-feature.stderr
expansion-time-include.rs
expansion-time.rs
expansion-time.stderr Mark missing_fragment_specifier as FutureReleaseErrorReportInDeps 2024-07-24 13:16:46 -04:00
expect-future_breakage-crash-issue-126521.rs Prevent ICE from expected future breakage 2024-06-25 22:32:46 +02:00
expect-future_breakage-crash-issue-126521.stderr Prevent ICE from expected future breakage 2024-06-25 22:32:46 +02:00
expr_attr_paren_order.rs
expr_attr_paren_order.stderr
expr-field.rs
fn_must_use.rs
fn_must_use.stderr
for_loop_over_fallibles.rs
for_loop_over_fallibles.stderr
forbid-error-capped.rs
forbid-group-group-1.rs
forbid-group-group-1.stderr
forbid-group-group-2.rs
forbid-group-group-2.stderr
forbid-group-member.rs
forbid-group-member.stderr
forbid-member-group.rs
forbid-member-group.stderr
forgetting_copy_types-can-fixed.fixed
forgetting_copy_types-can-fixed.rs
forgetting_copy_types-can-fixed.stderr
forgetting_copy_types.rs
forgetting_copy_types.stderr
forgetting_references-can-fixed.fixed
forgetting_references-can-fixed.rs
forgetting_references-can-fixed.stderr
forgetting_references.rs
forgetting_references.stderr
function-item-references.rs
function-item-references.stderr
future-incompat-json-test.rs
future-incompat-json-test.stderr
future-incompat-test.rs
future-incompat-test.stderr
group-denied-lint-allowed.rs
group-forbid-always-trumps-cli.rs
group-forbid-always-trumps-cli.stderr
ice-array-into-iter-lint-issue-121532.rs
ice-array-into-iter-lint-issue-121532.stderr
ice-const-prop-unions-known-panics-lint-123710.rs
ice-const-prop-unions-known-panics-lint-123710.stderr
ice-unions-known-panics-lint-issue-121534.rs
inclusive-range-pattern-syntax.fixed
inclusive-range-pattern-syntax.rs
inclusive-range-pattern-syntax.stderr
inert-attr-macro.rs
inert-attr-macro.stderr
inline-trait-and-foreign-items.rs
inline-trait-and-foreign-items.stderr
internal_features.rs
internal_features.stderr
invalid_from_utf8.rs
invalid_from_utf8.stderr
invalid_value-polymorphic.rs
invalid_value.rs
invalid_value.stderr
invalid-nan-comparison-suggestion.fixed
invalid-nan-comparison-suggestion.rs
invalid-nan-comparison-suggestion.stderr
invalid-nan-comparison.rs
invalid-nan-comparison.stderr
issue-1866.rs
issue-1866.stderr
issue-14309.rs
issue-14309.stderr
issue-14837.rs
issue-17718-const-naming.rs
issue-17718-const-naming.stderr
issue-19102.rs
issue-20343.rs
issue-30302.rs
issue-30302.stderr
issue-34798.rs
issue-35075.rs
issue-35075.stderr
issue-47775-nested-macro-unnecessary-parens-arg.rs
issue-49588-non-shorthand-field-patterns-in-pattern-macro.rs
issue-54099-camel-case-underscore-types.rs
issue-57410-1.rs
issue-57410.rs
issue-63364.rs
issue-63364.stderr
issue-70819-dont-override-forbid-in-same-scope.rs
issue-70819-dont-override-forbid-in-same-scope.stderr
issue-79546-fuel-ice.rs
issue-79744.rs
issue-79744.stderr
issue-80988.rs
issue-80988.stderr
issue-81218.rs
issue-83477.rs
issue-83477.stderr
issue-87274-paren-parent.rs
issue-87274-paren-parent.stderr
issue-90614-accept-allow-text-direction-codepoint-in-comment-lint.rs
issue-97094.rs
issue-97094.stderr
issue-99387.rs
issue-99387.stderr
issue-101284.rs
issue-102705.rs
issue-103317.fixed
issue-103317.rs
issue-103317.stderr
issue-103435-extra-parentheses.fixed
issue-103435-extra-parentheses.rs
issue-103435-extra-parentheses.stderr
issue-104392.rs
issue-104392.stderr
issue-104897.rs
issue-104897.stderr Be more accurate about calculating display_col from a BytePos 2024-07-18 20:08:38 +00:00
issue-106991.rs
issue-106991.stderr
issue-108155.rs
issue-109152.rs
issue-109152.stderr
issue-109529.fixed
issue-109529.rs
issue-109529.stderr
issue-110573.rs
issue-111359.rs
issue-111359.stderr
issue-112489.rs
issue-117949.noopt.stderr
issue-117949.opt_with_overflow_checks.stderr
issue-117949.opt.stderr
issue-117949.rs
issue-121070-let-range.rs
lint_map_unit_fn.rs
lint_map_unit_fn.stderr
lint_pre_expansion_extern_module_aux.rs
lint-attr-everywhere-early.rs
lint-attr-everywhere-early.stderr
lint-attr-everywhere-late.rs
lint-attr-everywhere-late.stderr Fix remaining cases 2024-06-21 19:00:18 -04:00
lint-attr-non-item-node.rs
lint-attr-non-item-node.stderr
lint-cap-trait-bounds.rs
lint-cap.rs
lint-change-warnings.rs
lint-change-warnings.stderr
lint-const-item-mutation.rs
lint-const-item-mutation.stderr
lint-ctypes-66202.rs
lint-ctypes-73249-1.rs
lint-ctypes-73249-2.rs
lint-ctypes-73249-2.stderr
lint-ctypes-73249-3.rs
lint-ctypes-73249-3.stderr
lint-ctypes-73249-4.rs
lint-ctypes-73249-5.rs
lint-ctypes-73249-5.stderr
lint-ctypes-73249.rs
lint-ctypes-73251-1.rs
lint-ctypes-73251-1.stderr
lint-ctypes-73251-2.rs
lint-ctypes-73251-2.stderr
lint-ctypes-73251.rs
lint-ctypes-73747.rs
lint-ctypes-94223.rs
lint-ctypes-94223.stderr
lint-ctypes-113436-1.rs
lint-ctypes-113436-1.stderr
lint-ctypes-113436.rs
lint-ctypes-113900.rs
lint-ctypes-enum.rs
lint-ctypes-enum.stderr
lint-ctypes-fn.rs
lint-ctypes-fn.stderr
lint-ctypes-option-nonnull-unsized.rs
lint-ctypes-option-nonnull-unsized.stderr
lint-ctypes.rs
lint-ctypes.stderr
lint-deref-nullptr.rs
lint-deref-nullptr.stderr
lint-directives-on-use-items-issue-10534.rs
lint-directives-on-use-items-issue-10534.stderr
lint-enum-intrinsics-non-enums.rs
lint-enum-intrinsics-non-enums.stderr Fix remaining cases 2024-06-21 19:00:18 -04:00
lint-expr-stmt-attrs-for-early-lints.rs
lint-ffi-safety-all-phantom.rs
lint-forbid-attr.rs
lint-forbid-attr.stderr
lint-forbid-cmdline.rs
lint-forbid-cmdline.stderr
lint-forbid-internal-unsafe.rs
lint-forbid-internal-unsafe.stderr
lint-group-nonstandard-style.rs
lint-group-nonstandard-style.stderr
lint-impl-fn.rs
lint-impl-fn.stderr
lint-incoherent-auto-trait-objects.rs
lint-incoherent-auto-trait-objects.stderr
lint-invalid-atomic-ordering-bool.rs
lint-invalid-atomic-ordering-bool.stderr
lint-invalid-atomic-ordering-exchange-weak.rs
lint-invalid-atomic-ordering-exchange-weak.stderr
lint-invalid-atomic-ordering-exchange.rs
lint-invalid-atomic-ordering-exchange.stderr
lint-invalid-atomic-ordering-false-positive.rs
lint-invalid-atomic-ordering-fence.rs
lint-invalid-atomic-ordering-fence.stderr
lint-invalid-atomic-ordering-fetch-update.rs
lint-invalid-atomic-ordering-fetch-update.stderr
lint-invalid-atomic-ordering-int.rs
lint-invalid-atomic-ordering-int.stderr
lint-invalid-atomic-ordering-ptr.rs
lint-invalid-atomic-ordering-ptr.stderr
lint-invalid-atomic-ordering-uint.rs
lint-invalid-atomic-ordering-uint.stderr
lint-level-macro-def-mod.rs
lint-level-macro-def.rs
lint-lowercase-static-const-pattern-rename.rs
lint-lowercase-static-const-pattern.rs
lint-lowercase-static-const-pattern.stderr
lint-malformed.rs
lint-malformed.stderr
lint-match-arms-2.rs
lint-match-arms-2.stderr
lint-match-arms.rs
lint-match-arms.stderr
lint-misplaced-attr.rs
lint-misplaced-attr.stderr
lint-missing-copy-implementations-allow.rs
lint-missing-copy-implementations.rs
lint-missing-copy-implementations.stderr
lint-missing-doc.rs
lint-missing-doc.stderr
lint-non-camel-case-types.rs
lint-non-camel-case-types.stderr
lint-non-camel-case-variant.rs
lint-non-camel-case-with-trailing-underscores.rs
lint-non-uppercase-associated-const.rs
lint-non-uppercase-associated-const.stderr
lint-non-uppercase-statics.rs
lint-non-uppercase-statics.stderr
lint-non-uppercase-trait-assoc-const.rs
lint-non-uppercase-trait-assoc-const.stderr
lint-nonstandard-style-unicode-1.rs
lint-nonstandard-style-unicode-1.stderr
lint-nonstandard-style-unicode-3.rs
lint-nonstandard-style-unicode-3.stderr
lint-output-format-2.rs
lint-output-format-2.stderr
lint-output-format.rs
lint-output-format.stderr
lint-overflowing-ops.noopt.stderr
lint-overflowing-ops.opt_with_overflow_checks.stderr
lint-overflowing-ops.opt.stderr
lint-overflowing-ops.rs Always use a colon in //@ normalize-*: headers 2024-07-11 12:23:44 +10:00
lint-pre-expansion-extern-module.rs
lint-pre-expansion-extern-module.stderr
lint-pub-unreachable-for-nested-glob.rs
lint-qualification.fixed
lint-qualification.rs
lint-qualification.stderr
lint-range-endpoint-overflow.rs
lint-range-endpoint-overflow.stderr
lint-removed-allow.rs
lint-removed-allow.stderr
lint-removed-cmdline-deny.rs
lint-removed-cmdline-deny.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
lint-removed-cmdline.rs
lint-removed-cmdline.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
lint-removed.rs
lint-removed.stderr
lint-renamed-allow.rs
lint-renamed-allow.stderr
lint-renamed-cmdline-deny.rs
lint-renamed-cmdline-deny.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
lint-renamed-cmdline.rs
lint-renamed-cmdline.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
lint-renamed.rs
lint-renamed.stderr
lint-shorthand-field.fixed
lint-shorthand-field.rs
lint-shorthand-field.stderr
lint-stability2.rs
lint-stability2.stderr
lint-stability3.rs
lint-stability3.stderr
lint-stability-2.rs
lint-stability-2.stderr
lint-stability-deprecated.rs
lint-stability-deprecated.stderr
lint-stability-fields-deprecated.rs
lint-stability-fields-deprecated.stderr
lint-stability-fields.rs
lint-stability-fields.stderr
lint-stability.rs
lint-stability.stderr
lint-strict-provenance-fuzzy-casts.rs
lint-strict-provenance-fuzzy-casts.stderr
lint-strict-provenance-lossy-casts.rs
lint-strict-provenance-lossy-casts.stderr
lint-struct-necessary.rs
lint-struct-necessary.stderr
lint-temporary-cstring-as-param.rs
lint-temporary-cstring-as-param.stderr
lint-temporary-cstring-as-ptr.rs
lint-temporary-cstring-as-ptr.stderr
lint-type-limits2.rs
lint-type-limits2.stderr
lint-type-limits3.rs
lint-type-limits3.stderr
lint-type-limits.rs
lint-type-limits.stderr
lint-type-overflow2.rs
lint-type-overflow2.stderr
lint-type-overflow.rs
lint-type-overflow.stderr
lint-unconditional-drop-recursion.rs
lint-unconditional-drop-recursion.stderr
lint-unconditional-recursion-tail-calls.rs Fix unconditional recursion lint wrt tail calls 2024-07-07 17:11:05 +02:00
lint-unconditional-recursion-tail-calls.stderr Fix unconditional recursion lint wrt tail calls 2024-07-07 17:11:05 +02:00
lint-unconditional-recursion.rs
lint-unconditional-recursion.stderr
lint-unexported-no-mangle.rs
lint-unexported-no-mangle.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
lint-unknown-feature-default.rs
lint-unknown-feature.rs
lint-unknown-lint-cmdline-allow.rs
lint-unknown-lint-cmdline-deny.rs
lint-unknown-lint-cmdline-deny.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
lint-unknown-lint-cmdline.rs
lint-unknown-lint-cmdline.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
lint-unknown-lint.rs
lint-unknown-lint.stderr
lint-unnecessary-import-braces.rs
lint-unnecessary-import-braces.stderr
lint-unnecessary-parens.fixed
lint-unnecessary-parens.rs
lint-unnecessary-parens.stderr
lint-unsafe-code.rs
lint-unsafe-code.stderr
lints-in-foreign-macros.rs
lints-in-foreign-macros.stderr
missing_copy_impl_trivial_bounds.rs
missing-copy-implementations-negative-copy.rs
missing-copy-implementations-non-exhaustive.rs
missing-doc-private-macro.rs
missing-doc-private-macro.stderr
negative_literals.rs Temporarily switch ambiguous_negative_literals lint to allow 2024-07-31 19:36:47 +02:00
negative_literals.stderr Temporarily switch ambiguous_negative_literals lint to allow 2024-07-31 19:36:47 +02:00
noop-method-call.rs
noop-method-call.stderr
not_found.rs
not_found.stderr
opaque-ty-ffi-normalization-cycle.rs
opaque-ty-ffi-normalization-cycle.stderr
opaque-ty-ffi-unsafe.rs
opaque-ty-ffi-unsafe.stderr
outer-forbid.rs
outer-forbid.stderr
ptr_null_checks.rs
ptr_null_checks.stderr
reasons-erroneous.rs Remove the box_pointers lint. 2024-06-27 08:55:28 +10:00
reasons-erroneous.stderr Remove the box_pointers lint. 2024-06-27 08:55:28 +10:00
reasons-forbidden.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
reasons-forbidden.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
reasons.rs RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
reasons.stderr RFC 2383: Stabilize lint_reasons 🎉 2024-06-25 17:22:22 +02:00
recommend-literal.rs
recommend-literal.stderr
reference_casting.rs
reference_casting.stderr
register-tool-lint.rs
register-tool-lint.stderr
renamed-lints-still-apply.rs
renamed-lints-still-apply.stderr
rustdoc-group.rs
rustdoc-group.stderr
rustdoc-renamed.rs
rustdoc-renamed.stderr
special-upper-lower-cases.rs
special-upper-lower-cases.stderr
suggestions.fixed
suggestions.rs
suggestions.stderr Special case when a code line only has multiline span starts 2024-06-23 22:00:52 +00:00
suspicious-double-ref-op.rs
suspicious-double-ref-op.stderr
test-allow-dead-extern-static-no-warning.rs
test-inner-fn.rs
test-inner-fn.stderr
trivial_casts.rs
trivial_casts.stderr
trivial-cast-ice.rs
trivial-casts-featuring-type-ascription.rs
trivial-casts-featuring-type-ascription.stderr
trivial-casts.rs
trivial-casts.stderr
type-overflow.rs
type-overflow.stderr
unaligned_references_external_macro.rs
unaligned_references_external_macro.stderr
unaligned_references.rs
unaligned_references.stderr
unconditional_panic_98444.rs
unconditional_panic_98444.stderr
undropped_manually_drops.rs
undropped_manually_drops.stderr
unknown-lints-at-crate-level.rs
unnecessary-extern-crate.rs
unnecessary-extern-crate.stderr
unreachable_pub.rs
unreachable_pub.stderr
unreachable-async-fn.rs
unused_braces_borrow.fixed
unused_braces_borrow.rs
unused_braces_borrow.stderr
unused_braces_macro.rs
unused_braces.fixed
unused_braces.rs
unused_braces.stderr
unused_import_warning_issue_45268.rs
unused_import_warning_issue_45268.stderr
unused_labels.rs
unused_labels.stderr
unused_parens_json_suggestion.fixed
unused_parens_json_suggestion.rs
unused_parens_json_suggestion.stderr
unused_parens_multibyte_recovery.rs
unused_parens_multibyte_recovery.stderr
unused_parens_remove_json_suggestion.fixed
unused_parens_remove_json_suggestion.rs
unused_parens_remove_json_suggestion.stderr
unused_variables-issue-82488.fixed
unused_variables-issue-82488.rs
unused_variables-issue-82488.stderr
unused-borrows.rs
unused-borrows.stderr
unused-braces-while-let-with-mutable-value.rs
unused-qualification-in-derive-expansion.rs
unused-qualifications-global-paths.rs
use_suggestion_json.rs
use_suggestion_json.stderr Tweak output of import suggestions 2024-06-13 20:22:21 +00:00
warn-ctypes-inhibit.rs
warn-path-statement.rs
warn-path-statement.stderr
warn-unused-inline-on-fn-prototypes.rs
warn-unused-inline-on-fn-prototypes.stderr
wide_pointer_comparisons.rs
wide_pointer_comparisons.stderr Do not underline suggestions for code that is already there 2024-08-01 18:53:42 +00:00