/src/test/incremental/hashes/extern_mods.rs
https://gitlab.com/jianglu/rust · Rust · 244 lines · 154 code · 59 blank · 31 comment · 0 complexity · 954e4042a5f334be3737c2254818cb4e MD5 · raw file
- // Copyright 2016 The Rust Project Developers. See the COPYRIGHT
- // file at the top-level directory of this distribution and at
- // http://rust-lang.org/COPYRIGHT.
- //
- // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
- // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
- // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
- // option. This file may not be copied, modified, or distributed
- // except according to those terms.
- // This test case tests the incremental compilation hash (ICH) implementation
- // for `extern` modules.
- // The general pattern followed here is: Change one thing between rev1 and rev2
- // and make sure that the hash has changed, then change nothing between rev2 and
- // rev3 and make sure that the hash has not changed.
- // compile-pass
- // revisions: cfail1 cfail2 cfail3
- // compile-flags: -Z query-dep-graph -Zincremental-ignore-spans
- #![allow(warnings)]
- #![feature(rustc_attrs)]
- #![feature(unboxed_closures)]
- #![feature(link_args)]
- #![crate_type="rlib"]
- // Change function name --------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn change_function_name1(c: i64) -> i32;
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn change_function_name2(c: i64) -> i32;
- }
- // Change parameter name -------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn change_parameter_name(c: i64) -> i32;
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn change_parameter_name(d: i64) -> i32;
- }
- // Change parameter type -------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn change_parameter_type(c: i64) -> i32;
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn change_parameter_type(c: i32) -> i32;
- }
- // Change return type ----------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn change_return_type(c: i32) -> i32;
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn change_return_type(c: i32) -> i8;
- }
- // Add parameter ---------------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn add_parameter(c: i32) -> i32;
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn add_parameter(c: i32, d: i32) -> i32;
- }
- // Add return type -------------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn add_return_type(c: i32);
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn add_return_type(c: i32) -> i32;
- }
- // Make function variadic ------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn make_function_variadic(c: i32);
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn make_function_variadic(c: i32, ...);
- }
- // Change calling convention ---------------------------------------------------
- #[cfg(cfail1)]
- extern "C" {
- pub fn change_calling_convention(c: i32);
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern "rust-call" {
- pub fn change_calling_convention(c: i32);
- }
- // Make function public --------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- fn make_function_public(c: i32);
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn make_function_public(c: i32);
- }
- // Add function ----------------------------------------------------------------
- #[cfg(cfail1)]
- extern {
- pub fn add_function1(c: i32);
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn add_function1(c: i32);
- pub fn add_function2();
- }
- // Change link-args ------------------------------------------------------------
- #[cfg(cfail1)]
- #[link_args = "-foo -bar"]
- extern {
- pub fn change_link_args(c: i32);
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- #[link_args = "-foo -bar -baz"]
- extern {
- pub fn change_link_args(c: i32);
- }
- // Change link-name ------------------------------------------------------------
- #[cfg(cfail1)]
- #[link(name = "foo")]
- extern {
- pub fn change_link_name(c: i32);
- }
- #[cfg(not(cfail1))]
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- #[link(name = "bar")]
- extern {
- pub fn change_link_name(c: i32);
- }
- type c_i32 = i32;
- type c_i64 = i64;
- // Indirectly change parameter type --------------------------------------------
- mod indirectly_change_parameter_type {
- #[cfg(cfail1)]
- use super::c_i32 as c_int;
- #[cfg(not(cfail1))]
- use super::c_i64 as c_int;
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn indirectly_change_parameter_type(c: c_int);
- }
- }
- // Indirectly change return type --------------------------------------------
- mod indirectly_change_return_type {
- #[cfg(cfail1)]
- use super::c_i32 as c_int;
- #[cfg(not(cfail1))]
- use super::c_i64 as c_int;
- #[rustc_dirty(cfg="cfail2")]
- #[rustc_clean(cfg="cfail3")]
- extern {
- pub fn indirectly_change_return_type() -> c_int;
- }
- }