Skip to content

spurious "unused extern crate" #56098

Closed
@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

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions