Skip to content

Commit

Permalink
Add codegen tests for the genericity of fold closures
Browse files Browse the repository at this point in the history
  • Loading branch information
cuviper committed Aug 12, 2019
1 parent 6a04c76 commit 755c091
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/test/codegen/iter-fold-closure-no-dupes.rs
@@ -0,0 +1,14 @@
//! Check that fold closures aren't duplicated for each iterator type.
// compile-flags: -C opt-level=0

fn main() {
(0i32..10).by_ref().count();
(0i32..=10).by_ref().count();
}

// `count` calls `fold`, which calls `try_fold` -- find the `fold` closure:
// CHECK: {{^define.*Iterator::fold::.*closure}}
//
// Only one closure is needed for both `count` calls, even from different
// monomorphized iterator types, as it's only generic over the item type.
// CHECK-NOT: {{^define.*Iterator::fold::.*closure}}
10 changes: 10 additions & 0 deletions src/test/codegen/iter-fold-closure-no-iterator.rs
@@ -0,0 +1,10 @@
//! Check that fold closures aren't generic in the iterator type.
// compile-flags: -C opt-level=0

fn main() {
(0i32..10).by_ref().count();
}

// `count` calls `fold`, which calls `try_fold` -- that `fold` closure should
// not be generic in the iterator type, only in the item type.
// CHECK-NOT: {{^define.*Iterator::fold::.*closure.*Range}}

0 comments on commit 755c091

Please sign in to comment.