Skip to content

no_mangle is irrelevant if export_name is specified #1196

@thomaseizinger

Description

@thomaseizinger

Which lint or lints are the issue

function_export_name_changed

Known issues that might be causing this

  • Is the flagged item defined in another crate, or a re-export of such an item? (#638)

Steps to reproduce the bug with the above code

Remove the no_mangle attribute from a function that has export_name set as recommended by a new lint: rust-lang/rust#131558

firezone/boringtun@e405399

Actual Behaviour

cargo semver-checks complains despite no_mangle on an item with export_name being a no-op.

Expected Behaviour

Applying the lint suggestion should not cause an error.

Verbose Lint Output

    Updating crates.io index
     Locking 102 packages to latest compatible versions
    Building boringtun v0.6.0 (current)
   Compiling libc v0.2.171
    Checking cfg-if v1.0.0
   Compiling proc-macro2 v1.0.94
   Compiling unicode-ident v1.0.18
   Compiling typenum v1.18.0
   Compiling version_check v0.9.5
    Checking subtle v2.6.1
   Compiling semver v1.0.26
   Compiling zerocopy v0.8.23
    Checking cpufeatures v0.2.17
    Checking once_cell v1.21.1
   Compiling same-file v1.0.6
   Compiling autocfg v1.4.0
   Compiling shlex v1.3.0
   Compiling cfg_aliases v0.2.1
   Compiling thiserror v1.0.69
    Checking smallvec v1.14.0
   Compiling parking_lot_core v0.9.10
    Checking log v0.4.26
   Compiling walkdir v2.5.0
   Compiling nix v0.29.0
   Compiling cc v1.2.16
    Checking tracing-core v0.1.33
    Checking opaque-debug v0.3.1
    Checking bytes v1.10.1
    Checking memchr v2.7.4
    Checking scopeguard v1.2.0
    Checking overload v0.1.1
    Checking lazy_static v1.5.0
   Compiling generic-array v0.14.7
    Checking sharded-slab v0.1.7
   Compiling jni v0.19.0
    Checking nu-ansi-term v0.46.0
   Compiling lock_api v0.4.12
    Checking thread_local v1.1.8
    Checking tracing-log v0.2.0
    Checking pin-project-lite v0.2.16
    Checking bitflags v2.9.0
    Checking cesu8 v1.1.0
    Checking ip_network v0.4.1
   Compiling rustc_version v0.4.1
    Checking jni-sys v0.3.0
    Checking untrusted v0.9.0
    Checking ip_network_table-deps-treebitmap v0.5.0
    Checking base64 v0.22.1
    Checking hex v0.4.3
   Compiling curve25519-dalek v4.1.3
    Checking combine v4.6.7
    Checking ip_network_table v0.2.0
   Compiling quote v1.0.40
    Checking tracing-subscriber v0.3.19
   Compiling syn v2.0.100
   Compiling ring v0.17.14
    Checking block-buffer v0.10.4
    Checking inout v0.1.4
    Checking ppv-lite86 v0.2.21
    Checking getrandom v0.2.15
    Checking socket2 v0.5.8
    Checking rand_core v0.6.4
    Checking parking_lot v0.12.3
    Checking crypto-common v0.1.6
    Checking rand_chacha v0.3.1
    Checking digest v0.10.7
    Checking universal-hash v0.5.1
    Checking aead v0.5.2
    Checking poly1305 v0.8.0
    Checking hmac v0.12.1
    Checking blake2 v0.10.6
    Checking rand v0.8.5
   Compiling zeroize_derive v1.4.2
   Compiling curve25519-dalek-derive v0.1.1
   Compiling thiserror-impl v1.0.69
   Compiling tracing-attributes v0.1.28
    Checking zeroize v1.8.1
    Checking cipher v0.4.4
    Checking chacha20 v0.9.1
    Checking chacha20poly1305 v0.10.1
    Checking tracing v0.1.41
    Checking x25519-dalek v2.0.1
 Documenting boringtun v0.6.0 (/home/thomas/src/github.com/cloudflare/boringtun/boringtun)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.91s
       Built [  10.068s] (current)
     Parsing boringtun v0.6.0 (current)
      Parsed [   0.021s] (current)
    Building boringtun v0.6.0 (baseline)
   Compiling libc v0.2.171
    Checking cfg-if v1.0.0
   Compiling proc-macro2 v1.0.94
   Compiling unicode-ident v1.0.18
   Compiling version_check v0.9.5
   Compiling typenum v1.18.0
    Checking subtle v2.6.1
   Compiling semver v1.0.26
    Checking once_cell v1.21.1
    Checking cpufeatures v0.2.17
   Compiling platforms v3.5.0
   Compiling same-file v1.0.6
   Compiling shlex v1.3.0
   Compiling autocfg v1.4.0
   Compiling thiserror v1.0.69
    Checking smallvec v1.14.0
   Compiling parking_lot_core v0.9.10
    Checking log v0.4.26
   Compiling walkdir v2.5.0
    Checking lazy_static v1.5.0
   Compiling cc v1.2.16
    Checking overload v0.1.1
    Checking scopeguard v1.2.0
    Checking tracing-core v0.1.33
    Checking memchr v2.7.4
    Checking bytes v1.10.1
    Checking opaque-debug v0.3.1
    Checking nu-ansi-term v0.46.0
    Checking thread_local v1.1.8
    Checking sharded-slab v0.1.7
   Compiling generic-array v0.14.7
    Checking pin-project-lite v0.2.16
    Checking spin v0.5.2
    Checking ip_network_table-deps-treebitmap v0.5.0
    Checking jni-sys v0.3.0
   Compiling jni v0.19.0
   Compiling lock_api v0.4.12
    Checking bitflags v1.3.2
    Checking cesu8 v1.1.0
    Checking ip_network v0.4.1
    Checking untrusted v0.7.1
    Checking untrusted v0.9.0
    Checking tracing-log v0.2.0
    Checking mock_instant v0.2.1
    Checking base64 v0.13.1
    Checking hex v0.4.3
   Compiling rustc_version v0.4.1
    Checking ip_network_table v0.2.0
    Checking combine v4.6.7
   Compiling curve25519-dalek v4.0.0-rc.3
    Checking tracing-subscriber v0.3.19
   Compiling quote v1.0.40
   Compiling syn v2.0.100
   Compiling ring v0.16.20
    Checking inout v0.1.4
    Checking block-buffer v0.10.4
    Checking getrandom v0.2.15
    Checking nix v0.25.1
    Checking socket2 v0.4.10
    Checking rand_core v0.6.4
    Checking parking_lot v0.12.3
    Checking crypto-common v0.1.6
    Checking universal-hash v0.5.1
    Checking digest v0.10.7
    Checking aead v0.5.2
    Checking poly1305 v0.8.0
    Checking blake2 v0.10.6
    Checking hmac v0.12.1
   Compiling zeroize_derive v1.4.2
   Compiling thiserror-impl v1.0.69
   Compiling curve25519-dalek-derive v0.1.1
   Compiling tracing-attributes v0.1.28
    Checking zeroize v1.8.1
    Checking cipher v0.4.4
    Checking chacha20 v0.9.1
    Checking chacha20poly1305 v0.10.1
    Checking tracing v0.1.41
    Checking x25519-dalek v2.0.0-rc.3
 Documenting boringtun v0.6.0
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 9.69s
       Built [   9.860s] (baseline)
     Parsing boringtun v0.6.0 (baseline)
      Parsed [   0.017s] (baseline)
    Checking boringtun v0.6.0 -> v0.6.0 (no change)
    Starting 107 checks, 0 unnecessary on 16 threads
        PASS [   0.001s]       major        attribute_proc_macro_missing
        PASS [   0.009s]       major        auto_trait_impl_removed
        PASS [   0.001s]       major        constructible_struct_adds_field
        PASS [   0.003s]       major        constructible_struct_adds_private_field
        PASS [   0.001s]       major        constructible_struct_changed_type
        PASS [   0.001s]       major        declarative_macro_missing
        PASS [   0.001s]       major        derive_helper_attr_removed
        PASS [   0.001s]       major        derive_proc_macro_missing
        PASS [   0.006s]       major        derive_trait_impl_removed
        PASS [   0.002s]       major        enum_discriminants_undefined_non_exhaustive_variant
        PASS [   0.001s]       major        enum_discriminants_undefined_non_unit_variant
        PASS [   0.001s]       major        enum_marked_non_exhaustive
        PASS [   0.001s]       major        enum_missing
        PASS [   0.001s]       minor        enum_must_use_added
        PASS [   0.002s]       major        enum_no_repr_variant_discriminant_changed
        PASS [   0.001s]       major        enum_now_doc_hidden
        PASS [   0.004s]       major        enum_repr_int_changed
        PASS [   0.002s]       major        enum_repr_int_removed
        PASS [   0.001s]       major        enum_repr_transparent_removed
        PASS [   0.002s]       major        enum_repr_variant_discriminant_changed
        PASS [   0.002s]       major        enum_struct_variant_field_added
        PASS [   0.002s]       major        enum_struct_variant_field_missing
        PASS [   0.001s]       major        enum_struct_variant_field_now_doc_hidden
        PASS [   0.003s]       major        enum_tuple_variant_changed_kind
        PASS [   0.002s]       major        enum_tuple_variant_field_added
        PASS [   0.003s]       major        enum_tuple_variant_field_missing
        PASS [   0.002s]       major        enum_tuple_variant_field_now_doc_hidden
        PASS [   0.005s]       major        enum_unit_variant_changed_kind
        PASS [   0.002s]       major        enum_variant_added
        PASS [   0.002s]       major        enum_variant_marked_non_exhaustive
        PASS [   0.002s]       major        enum_variant_missing
        PASS [   0.001s]       major        exported_function_changed_abi
        PASS [   0.001s]       major        feature_missing
        PASS [   0.012s]       major        function_abi_no_longer_unwind
        PASS [   0.001s]       major        function_changed_abi
        PASS [   0.001s]       major        function_const_removed
        FAIL [   0.001s]       major        function_export_name_changed
        PASS [   0.001s]       major        function_like_proc_macro_missing
        PASS [   0.001s]       major        function_missing
        PASS [   0.001s]       minor        function_must_use_added
        PASS [   0.001s]       major        function_now_doc_hidden
        PASS [   0.001s]       major        function_parameter_count_changed
        PASS [   0.003s]       major        function_unsafe_added
        PASS [   0.001s]       major        inherent_associated_const_now_doc_hidden
        PASS [   0.001s]       major        inherent_associated_pub_const_missing
        PASS [   0.001s]       major        inherent_method_const_removed
        PASS [   0.002s]       major        inherent_method_missing
        PASS [   0.001s]       minor        inherent_method_must_use_added
        PASS [   0.002s]       major        inherent_method_now_doc_hidden
        PASS [   0.003s]       major        inherent_method_unsafe_added
        PASS [   0.001s]       major        macro_no_longer_exported
        PASS [   0.001s]       major        macro_now_doc_hidden
        PASS [   0.003s]       major        method_parameter_count_changed
        PASS [   0.001s]       major        module_missing
        PASS [   0.001s]       major        non_exhaustive_struct_changed_type
        PASS [   0.001s]       major        pub_module_level_const_missing
        PASS [   0.001s]       major        pub_module_level_const_now_doc_hidden
        PASS [   0.001s]       major        pub_static_missing
        PASS [   0.001s]       major        pub_static_mut_now_immutable
        PASS [   0.001s]       major        pub_static_now_doc_hidden
        PASS [   0.005s]       major        pub_static_now_mutable
        PASS [   0.001s]       major        repr_c_removed
        PASS [   0.001s]       major        repr_packed_added
        PASS [   0.001s]       major        repr_packed_removed
        PASS [   0.004s]       major        sized_impl_removed
        PASS [   0.001s]       major        struct_marked_non_exhaustive
        PASS [   0.007s]       major        struct_missing
        PASS [   0.001s]       minor        struct_must_use_added
        PASS [   0.003s]       major        struct_now_doc_hidden
        PASS [   0.001s]       major        struct_pub_field_missing
        PASS [   0.003s]       major        struct_pub_field_now_doc_hidden
        PASS [   0.001s]       major        struct_repr_transparent_removed
        PASS [   0.001s]       major        struct_with_no_pub_fields_changed_type
        PASS [   0.001s]       major        struct_with_pub_fields_changed_type
        PASS [   0.001s]       major        trait_added_supertrait
        PASS [   0.001s]       major        trait_associated_const_added
        PASS [   0.001s]       major        trait_associated_const_default_removed
        PASS [   0.001s]       major        trait_associated_const_now_doc_hidden
        PASS [   0.001s]       major        trait_associated_type_added
        PASS [   0.001s]       major        trait_associated_type_default_removed
        PASS [   0.001s]       major        trait_associated_type_now_doc_hidden
        PASS [   0.001s]       major        trait_method_added
        PASS [   0.001s]       major        trait_method_default_impl_removed
        PASS [   0.001s]       major        trait_method_missing
        PASS [   0.004s]       major        trait_method_now_doc_hidden
        PASS [   0.001s]       major        trait_method_unsafe_added
        PASS [   0.001s]       major        trait_method_unsafe_removed
        PASS [   0.001s]       major        trait_mismatched_generic_lifetimes
        PASS [   0.001s]       major        trait_missing
        PASS [   0.001s]       minor        trait_must_use_added
        PASS [   0.001s]       major        trait_newly_sealed
        PASS [   0.001s]       major        trait_no_longer_object_safe
        PASS [   0.001s]       major        trait_now_doc_hidden
        PASS [   0.004s]       major        trait_removed_associated_constant
        PASS [   0.003s]       major        trait_removed_associated_type
        PASS [   0.001s]       major        trait_removed_supertrait
        PASS [   0.002s]       major        trait_unsafe_added
        PASS [   0.001s]       major        trait_unsafe_removed
        PASS [   0.001s]       major        tuple_struct_to_plain_struct
        PASS [   0.001s]       minor        type_marked_deprecated
        PASS [   0.004s]       major        type_mismatched_generic_lifetimes
        PASS [   0.001s]       major        union_field_missing
        PASS [   0.001s]       major        union_missing
        PASS [   0.001s]       minor        union_must_use_added
        PASS [   0.001s]       major        union_now_doc_hidden
        PASS [   0.001s]       major        union_pub_field_now_doc_hidden
        PASS [   0.001s]       major        unit_struct_changed_kind
     Checked [   0.027s] 107 checks: 106 pass, 1 fail, 0 warn, 0 skip

--- failure function_export_name_changed: function's export name has changed or been removed ---

Description:
The ABI export name of a function has been changed or removed through the #[no_mangle] or #[export_name] attributes.
        ref: https://doc.rust-lang.org/reference/abi.html#the-no_mangle-attribute
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.38.0/src/lints/function_export_name_changed.ron

Failed in:
  function boringtun::jni::convert_x25519_key_to_hex no longer has ABI name convert_x25519_key_to_hex in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:74
  function boringtun::jni::generate_public_key1 no longer has ABI name generate_public_key1 in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:48
  function boringtun::jni::create_new_tunnel no longer has ABI name create_new_tunnel in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:125
  function boringtun::jni::encrypt_raw_packet no longer has ABI name encrypt_raw_packet in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:170
  function boringtun::jni::decrypt_to_raw_packet no longer has ABI name decrypt_to_raw_packet in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:204
  function boringtun::jni::convert_x25519_key_to_base64 no longer has ABI name convert_x25519_key_to_base64 in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:99
  function boringtun::jni::run_periodic_task no longer has ABI name run_periodic_task in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:239
  function boringtun::jni::generate_secret_key no longer has ABI name generate_secret_key in /home/thomas/src/github.com/cloudflare/boringtun/boringtun/src/jni.rs:39

     Summary semver requires new major version: 1 major and 0 minor checks failed
    Finished [  38.813s] boringtun

Generated System Information

System information:

Software version

cargo-semver-checks 0.38.0

Operating system

Linux 6.13.6

Command-line

/nix/store/50cbkpvmbzscxjrmm3qwfydns97xsvfd-cargo-semver-checks-0.38.0/bin/cargo-semver-checks semver-checks --bugreport

cargo version

> cargo -V
cargo 1.85.0 (d73d2caf9 2024-12-31)

Compile time information

  • Profile: release
  • Target triple: x86_64-unknown-linux-gnu
  • Family: unix
  • OS: linux
  • Architecture: x86_64
  • Pointer width: 64
  • Endian: little
  • CPU features: fxsr,sse,sse2
  • Host: x86_64-unknown-linux-gnu

Cargo build configuration:

Build Configuration

No response

Additional Context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-lintArea: new or existing lintC-bugCategory: doesn't meet expectations

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions