/src/test/run-pass/auxiliary/foreign_lib.rs

https://gitlab.com/jianglu/rust · Rust · 48 lines · 27 code · 8 blank · 13 comment · 0 complexity · 022822c4742a6bcc55582207745c24af MD5 · raw file

  1. // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
  2. // file at the top-level directory of this distribution and at
  3. // http://rust-lang.org/COPYRIGHT.
  4. //
  5. // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
  6. // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
  7. // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
  8. // option. This file may not be copied, modified, or distributed
  9. // except according to those terms.
  10. #![crate_name="foreign_lib"]
  11. #![feature(libc)]
  12. pub mod rustrt {
  13. extern crate libc;
  14. #[link(name = "rust_test_helpers", kind = "static")]
  15. extern {
  16. pub fn rust_get_test_int() -> libc::intptr_t;
  17. }
  18. }
  19. pub mod rustrt2 {
  20. extern crate libc;
  21. extern {
  22. pub fn rust_get_test_int() -> libc::intptr_t;
  23. }
  24. }
  25. pub mod rustrt3 {
  26. // Different type, but same ABI (on all supported platforms).
  27. // Ensures that we don't ICE or trigger LLVM asserts when
  28. // importing the same symbol under different types.
  29. // See https://github.com/rust-lang/rust/issues/32740.
  30. extern {
  31. pub fn rust_get_test_int() -> *const u8;
  32. }
  33. }
  34. pub fn local_uses() {
  35. unsafe {
  36. let x = rustrt::rust_get_test_int();
  37. assert_eq!(x, rustrt2::rust_get_test_int());
  38. assert_eq!(x as *const _, rustrt3::rust_get_test_int());
  39. }
  40. }