Skip to content

Rollup of 15 pull requests #37002

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 42 commits into from
Oct 6, 2016
Merged
Changes from 1 commit
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
42a5a06
Touch up formatting for variance README.md
cbreeden Sep 25, 2016
cb22364
Merge E0002 into E0004
GuillaumeGomez Oct 2, 2016
f320004
incr.comp.: Add test case for dependency graph of type aliases.
michaelwoerister Oct 3, 2016
ae51ccf
SimplifyCfg: simplify the start block
arielb1 Oct 4, 2016
44ac016
SimplifyCfg: don't incref target when collapsing a goto with 1 pred
arielb1 Oct 4, 2016
29212ec
Assign internal linkage to autogenerated FnOnce::call_once() instances.
michaelwoerister Oct 4, 2016
4570199
Add symbol hash to trans::partitioning debug output.
michaelwoerister Oct 4, 2016
cd7a04c
rustdoc: Fix missing *mut T impl
ollie27 Oct 4, 2016
bfdf437
update tests
arielb1 Oct 4, 2016
2d34ad0
trans: Make sure that each FnOnce shim is only translated once.
michaelwoerister Oct 4, 2016
4922abf
Haiku: Fix IPv6 target_os check
kallisti5 Oct 4, 2016
7bbfac6
update sip.rs for new intrinsics and defaults
edre Oct 4, 2016
335d393
Minor modifications in concurrency section of the Rust book
nikhilshagri Oct 4, 2016
51ef2b3
rustbuild: Fix bug preventing per-target musl-root
nastevens Oct 5, 2016
7937f6c
rustbuild: Fix panic message when musl-root not set
nastevens Oct 5, 2016
9081c00
ICH - Add test cases for function interfaces
Oct 3, 2016
e051eb3
ICH - Include omitted elements in inc. comp. hash #36914
Oct 4, 2016
14fe7ce
Adjustments due to naming changes in Ty_ and PatKind structs
Oct 5, 2016
6d54e0e
emit !nonnull metadata on loaded fat pointers when possible
arielb1 Oct 4, 2016
9233366
clean up misc. uses of get_dataptr/get_meta
arielb1 Oct 4, 2016
45fe3a1
emit an assume that cast-from enums are in range
arielb1 Oct 4, 2016
8d06332
Fixed small typo in `BufRead` comments
Razican Oct 5, 2016
a4e9c39
Clarify last element in str.{r,}splitn documentation
angelsl Oct 3, 2016
4b5a9a3
ICH: update saw_ty for TyBareFn; Update tests for functioninterfaces
Oct 5, 2016
6f64296
Merge branch 'master' into mb/36812_ICHFunctionInterfaces
Oct 5, 2016
0e40dbb
ICH: Remove obsolete binding in saw_ty
Oct 6, 2016
cb700e7
Add testcase for issue-32948
ParkHanbum Sep 29, 2016
d3bb568
Rollup merge of #36726 - cbreeden:patch-1, r=GuillaumeGomez
Oct 6, 2016
09712d7
Rollup merge of #36832 - ParkHanbum:master, r=michaelwoerister
Oct 6, 2016
5a199bf
Rollup merge of #36909 - GuillaumeGomez:merge_e0002_e0004, r=arielb1
Oct 6, 2016
91106f7
Rollup merge of #36930 - angelsl:issue-36202, r=frewsxcv
Oct 6, 2016
5dcd71f
Rollup merge of #36932 - michaelwoerister:type-alias-dep-graph-test, …
Oct 6, 2016
534a2b5
Rollup merge of #36957 - cynicaldevil:docs, r=frewsxcv
Oct 6, 2016
9f1089b
Rollup merge of #36959 - arielb1:simplify-cfg-fixes, r=eddyb
Oct 6, 2016
1a7aa75
Rollup merge of #36960 - michaelwoerister:linker-regression, r=eddyb
Oct 6, 2016
ed5a3c0
Rollup merge of #36962 - arielb1:cast-assumptions, r=eddyb
Oct 6, 2016
0698929
Rollup merge of #36965 - kallisti5:master, r=alexcrichton
Oct 6, 2016
4c10026
Rollup merge of #36966 - ollie27:rustdoc_mut_ptr_impl, r=alexcrichton
Oct 6, 2016
a19e22e
Rollup merge of #36967 - edre:master, r=alexcrichton
Oct 6, 2016
9ceef4e
Rollup merge of #36972 - nastevens:fix-rustbuild-per-target-musl-root…
Oct 6, 2016
2c8c0de
Rollup merge of #36974 - MathieuBordere:mb/36812_ICHFunctionInterface…
Oct 6, 2016
89aebdb
Rollup merge of #36977 - Razican:bufreader_typo_fix, r=alexcrichton
Oct 6, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
ICH - Add test cases for function interfaces
  • Loading branch information
Mathieu Borderé authored and Mathieu Borderé committed Oct 5, 2016
commit 9081c003d32f0ae7cf5d5df394e92721ec559bcc
382 changes: 382 additions & 0 deletions src/test/incremental/hashes/function_interfaces.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,382 @@
// 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 function interfaces.

// 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.

// must-compile-successfully
// revisions: cfail1 cfail2 cfail3
// compile-flags: -Z query-dep-graph


#![allow(warnings)]
#![feature(conservative_impl_trait)]
#![feature(intrinsics)]
#![feature(linkage)]
#![feature(rustc_attrs)]
#![crate_type="rlib"]


// Add Parameter ---------------------------------------------------------------

#[cfg(cfail1)]
fn add_parameter() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn add_parameter(p: i32) {}


// Add Return Type -------------------------------------------------------------

#[cfg(cfail1)]
fn add_return_type() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn add_return_type() -> () {}


// Change Parameter Type -------------------------------------------------------

#[cfg(cfail1)]
fn type_of_parameter(p: i32) {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn type_of_parameter(p: i64) {}


// Change Parameter Type Reference ---------------------------------------------

#[cfg(cfail1)]
fn type_of_parameter_ref(p: &i32) {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn type_of_parameter_ref(p: &mut i32) {}


// Change Parameter Order ------------------------------------------------------

#[cfg(cfail1)]
fn order_of_parameters(p1: i32, p2: i32) {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn order_of_parameters(p2: i32, p1: i32) {}


// Unsafe ----------------------------------------------------------------------

#[cfg(cfail1)]
fn make_unsafe() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
unsafe fn make_unsafe() {}


// Extern ----------------------------------------------------------------------

#[cfg(cfail1)]
fn make_extern() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
extern fn make_extern() {}


// Extern C Extern Rust-Intrinsic ----------------------------------------------

#[cfg(cfail1)]
extern "C" fn make_intrinsic() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
extern "rust-intrinsic" fn make_intrinsic() {}


// Type Parameter --------------------------------------------------------------

#[cfg(cfail1)]
fn type_parameter() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn type_parameter<T>() {}


// Lifetime Parameter ----------------------------------------------------------

#[cfg(cfail1)]
fn lifetime_parameter() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn lifetime_parameter<'a>() {}


// Trait Bound -----------------------------------------------------------------

#[cfg(cfail1)]
fn trait_bound<T>() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn trait_bound<T: Eq>() {}


// Builtin Bound ---------------------------------------------------------------

#[cfg(cfail1)]
fn builtin_bound<T>() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn builtin_bound<T: Send>() {}


// Lifetime Bound --------------------------------------------------------------

#[cfg(cfail1)]
fn lifetime_bound<T>() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn lifetime_bound<'a, T: 'a>() {}


// Second Trait Bound ----------------------------------------------------------

#[cfg(cfail1)]
fn second_trait_bound<T: Eq>() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn second_trait_bound<T: Eq + Clone>() {}


// Second Builtin Bound --------------------------------------------------------

#[cfg(cfail1)]
fn second_builtin_bound<T: Send>() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn second_builtin_bound<T: Send + Sized>() {}


// Second Lifetime Bound -------------------------------------------------------

#[cfg(cfail1)]
fn second_lifetime_bound<'a, T: 'a>() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn second_lifetime_bound<'a, 'b, T: 'a + 'b>() {}


// Inline ----------------------------------------------------------------------

#[cfg(cfail1)]
fn inline() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
#[inline]
fn inline() {}


// Inline Never ----------------------------------------------------------------

#[cfg(cfail1)]
fn inline_never() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
#[inline(never)]
fn inline_never() {}


// No Mangle -------------------------------------------------------------------

#[cfg(cfail1)]
fn no_mangle() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
#[no_mangle]
fn no_mangle() {}


// Linkage ---------------------------------------------------------------------

#[cfg(cfail1)]
fn linkage() {}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
#[linkage]
fn linkage() {}


// Return Impl Trait -----------------------------------------------------------

#[cfg(cfail1)]
fn return_impl_trait() -> i32 {
0
}

#[cfg(not(cfail1))]
#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn return_impl_trait() -> impl Clone {
0
}


// Change Return Type Indirectly -----------------------------------------------

struct ReferencedType1;
struct ReferencedType2;

mod change_return_type_indirectly {
#[cfg(cfail1)]
use super::ReferencedType1 as ReturnType;
#[cfg(not(cfail1))]
use super::ReferencedType2 as ReturnType;

#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn indirect_return_type() -> ReturnType {
ReturnType {}
}
}


// Change Parameter Type Indirectly --------------------------------------------

mod change_parameter_type_indirectly {
#[cfg(cfail1)]
use super::ReferencedType1 as ParameterType;
#[cfg(not(cfail1))]
use super::ReferencedType2 as ParameterType;

#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn indirect_parameter_type(p: ParameterType) {}
}


// Change Trait Bound Indirectly -----------------------------------------------

trait ReferencedTrait1 {}
trait ReferencedTrait2 {}

mod change_trait_bound_indirectly {
#[cfg(cfail1)]
use super::ReferencedTrait1 as Trait;
#[cfg(not(cfail1))]
use super::ReferencedTrait2 as Trait;

#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn indirect_trait_bound<T: Trait>(p: T) {}
}


// Change Trait Bound Indirectly In Where Clause -------------------------------

mod change_trait_bound_indirectly_in_where_clause {
#[cfg(cfail1)]
use super::ReferencedTrait1 as Trait;
#[cfg(not(cfail1))]
use super::ReferencedTrait2 as Trait;

#[rustc_dirty(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
fn indirect_trait_bound_where<T>(p: T) where T: Trait {}
}