Skip to content

spurious "unused extern crate" #56098

@RalfJung

Description

@RalfJung

When compiling this code

#![feature(libc, extern_crate_item_prelude)]

extern crate libc;

use std::ffi::CString;

mod mlibc {
    use libc::{c_char, size_t};
    extern {
        #[link_name = "strlen"]
        pub fn my_strlen(str: *const c_char) -> size_t;
    }
}

fn strlen(str: String) -> usize {
    // C string is terminated with a zero
    let s = CString::new(str).unwrap();
    unsafe {
        mlibc::my_strlen(s.as_ptr()) as usize
    }
}

pub fn main() {
    let len = strlen("Rust".to_string());
    assert_eq!(len, 4);
}

with --edition 2018 -Wunused, I get an incorrect warning:

warning: unused extern crate
  --> tests/run-pass-fullmir/foreign-fn-linkname.rs:15:1
   |
15 | extern crate libc;
   | ^^^^^^^^^^^^^^^^^^ help: remove it
   |
   = note: `-W unused-extern-crates` implied by `-W unused`

The extern crate is used; removing it breaks the program.

Metadata

Metadata

Assignees

Labels

A-lintsArea: Lints (warnings about flaws in source code) such as unused_mut.C-bugCategory: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions