Skip to content

Incremental: code is not recompiled when a case of string literal is changed #49783

Closed
@matklad

Description

@matklad

Originally reported by @redcape at rust-lang/cargo#5320

~/trash
λ rustc --version
rustc 1.26.0-beta.2 (0e350672e 2018-04-05)

λ cat main.rs
fn main() {
    let test_str = "a man a plan a canal panama";
    println!("{}", is_palindrome(test_str));
}

fn is_palindrome(test_str: &str) -> bool {
    use std::iter::FromIterator;

    let non_whitespace = |p : &char| !p.is_whitespace();
    let forward_iter = test_str.chars().filter(non_whitespace);
    let rev_iter = test_str.chars().rev().filter(non_whitespace);
    println!("{:?}", String::from_iter(test_str.chars()));
    println!("{:?}", String::from_iter(test_str.chars().rev()));
    println!("{:?}", String::from_iter(forward_iter.clone()));
    println!("{:?}", String::from_iter(rev_iter.clone()));
    forward_iter.eq(rev_iter)
}

~/trash
λ rustc main.rs -C incremental=inc

~/trash
λ ./main
"a man a plan a canal panama"
"amanap lanac a nalp a nam a"
"amanaplanacanalpanama"
"amanaplanacanalpanama"
true

~/trash
λ vim main.rs # change `"a man` to `"A man`

~/trash
λ cat main.rs
fn main() {
    let test_str = "A man a plan a canal panama";
    println!("{}", is_palindrome(test_str));
}

fn is_palindrome(test_str: &str) -> bool {
    use std::iter::FromIterator;

    let non_whitespace = |p : &char| !p.is_whitespace();
    let forward_iter = test_str.chars().filter(non_whitespace);
    let rev_iter = test_str.chars().rev().filter(non_whitespace);
    println!("{:?}", String::from_iter(test_str.chars()));
    println!("{:?}", String::from_iter(test_str.chars().rev()));
    println!("{:?}", String::from_iter(forward_iter.clone()));
    println!("{:?}", String::from_iter(rev_iter.clone()));
    forward_iter.eq(rev_iter)
}

~/trash
λ ./main
"a man a plan a canal panama" # should be capital A here
"amanap lanac a nalp a nam a"
"amanaplanacanalpanama"
"amanaplanacanalpanama"
true

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions