diff options
| author | Rich Kadel <richkadel@google.com> | 2021-04-26 02:45:46 -0700 |
|---|---|---|
| committer | Rich Kadel <richkadel@google.com> | 2021-04-28 20:27:27 -0700 |
| commit | c26afb765cb3047f2fa83b21739d9211af39f7ce (patch) | |
| tree | e43e168dada70c9a23ce63183c6f379d307ac2cd /src/test/run-make-fulldeps | |
| parent | 50ca3ac24f08cc6c8bbef9ac27245f83f30bc749 (diff) | |
| download | rust-c26afb765cb3047f2fa83b21739d9211af39f7ce.tar.gz rust-c26afb765cb3047f2fa83b21739d9211af39f7ce.zip | |
Drop branching blocks with same span as expanded macro
Fixes: #84561
Diffstat (limited to 'src/test/run-make-fulldeps')
| -rw-r--r-- | src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.issue-84561.txt | 102 | ||||
| -rw-r--r-- | src/test/run-make-fulldeps/coverage/issue-84561.rs | 94 |
2 files changed, 196 insertions, 0 deletions
diff --git a/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.issue-84561.txt b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.issue-84561.txt new file mode 100644 index 00000000000..34d584f9eae --- /dev/null +++ b/src/test/run-make-fulldeps/coverage-reports/expected_show_coverage.issue-84561.txt @@ -0,0 +1,102 @@ + 1| |// FIXME(#84561): function-like macros produce unintuitive coverage results. + 2| |// This test demonstrates some of the problems. + 3| | + 4| 18|#[derive(Debug, PartialEq, Eq)] + ^5 ^0 + ------------------ + | <issue_84561::Foo as core::cmp::PartialEq>::eq: + | 4| 18|#[derive(Debug, PartialEq, Eq)] + ------------------ + | Unexecuted instantiation: <issue_84561::Foo as core::cmp::PartialEq>::ne + ------------------ + 5| |struct Foo(u32); + 6| | + 7| 1|fn main() { + 8| 1| let bar = Foo(1); + 9| 1| assert_eq!(bar, Foo(1)); + 10| 1| let baz = Foo(0); + 11| 1| assert_ne!(baz, Foo(1)); + 12| 1| println!("{:?}", Foo(1)); + 13| 1| println!("{:?}", bar); + 14| 1| println!("{:?}", baz); + 15| 1| + 16| 1| assert_eq!(Foo(1), Foo(1)); + 17| 1| assert_ne!(Foo(0), Foo(1)); + 18| 1| assert_eq!(Foo(2), Foo(2)); + 19| 1| let bar = Foo(1); + 20| 1| assert_ne!(Foo(0), Foo(3)); + 21| 1| assert_ne!(Foo(0), Foo(4)); + 22| 1| assert_eq!(Foo(3), Foo(3)); + 23| 1| assert_ne!(Foo(0), Foo(5)); + 24| 1| println!("{:?}", bar); + 25| 1| println!("{:?}", Foo(1)); + 26| 1| + 27| 1| let is_true = std::env::args().len() == 1; + 28| 1| + 29| 1| assert_eq!( + 30| 1| Foo(1), + 31| 1| Foo(1) + 32| 1| ); + 33| 1| assert_ne!( + 34| 1| Foo(0), + 35| 1| Foo(1) + 36| 1| ); + 37| 1| assert_eq!( + 38| 1| Foo(2), + 39| 1| Foo(2) + 40| 1| ); + 41| 1| let bar = Foo(1 + 42| 1| ); + 43| 1| assert_ne!( + 44| 1| Foo(0), + 45| 1| Foo(3) + 46| 1| ); + 47| 1| if is_true { + 48| 1| assert_ne!( + 49| 1| Foo(0), + 50| 1| Foo(4) + 51| 1| ); + 52| | } else { + 53| 0| assert_eq!( + 54| 0| Foo(3), + 55| 0| Foo(3) + 56| 0| ); + 57| | } + 58| | assert_ne!( + 59| 1| if is_true { + 60| 1| Foo(0) + 61| | } else { + 62| 0| Foo(1) + 63| | }, + 64| | Foo(5) + 65| | ); + 66| 1| assert_ne!( + 67| 1| Foo(5), + 68| 1| if is_true { + 69| 1| Foo(0) + 70| | } else { + 71| 0| Foo(1) + 72| | } + 73| | ); + 74| | assert_ne!( + 75| 1| if is_true { + 76| 1| assert_eq!( + 77| 1| Foo(3), + 78| 1| Foo(3) + 79| 1| ); + 80| 1| Foo(0) + 81| | } else { + 82| | assert_ne!( + 83| 0| if is_true { + 84| 0| Foo(0) + 85| | } else { + 86| 0| Foo(1) + 87| | }, + 88| | Foo(5) + 89| | ); + 90| 0| Foo(1) + 91| | }, + 92| | Foo(5) + 93| | ); + 94| 1|} + diff --git a/src/test/run-make-fulldeps/coverage/issue-84561.rs b/src/test/run-make-fulldeps/coverage/issue-84561.rs new file mode 100644 index 00000000000..a5a0e1dc758 --- /dev/null +++ b/src/test/run-make-fulldeps/coverage/issue-84561.rs @@ -0,0 +1,94 @@ +// FIXME(#84561): function-like macros produce unintuitive coverage results. +// This test demonstrates some of the problems. + +#[derive(Debug, PartialEq, Eq)] +struct Foo(u32); + +fn main() { + let bar = Foo(1); + assert_eq!(bar, Foo(1)); + let baz = Foo(0); + assert_ne!(baz, Foo(1)); + println!("{:?}", Foo(1)); + println!("{:?}", bar); + println!("{:?}", baz); + + assert_eq!(Foo(1), Foo(1)); + assert_ne!(Foo(0), Foo(1)); + assert_eq!(Foo(2), Foo(2)); + let bar = Foo(1); + assert_ne!(Foo(0), Foo(3)); + assert_ne!(Foo(0), Foo(4)); + assert_eq!(Foo(3), Foo(3)); + assert_ne!(Foo(0), Foo(5)); + println!("{:?}", bar); + println!("{:?}", Foo(1)); + + let is_true = std::env::args().len() == 1; + + assert_eq!( + Foo(1), + Foo(1) + ); + assert_ne!( + Foo(0), + Foo(1) + ); + assert_eq!( + Foo(2), + Foo(2) + ); + let bar = Foo(1 + ); + assert_ne!( + Foo(0), + Foo(3) + ); + if is_true { + assert_ne!( + Foo(0), + Foo(4) + ); + } else { + assert_eq!( + Foo(3), + Foo(3) + ); + } + assert_ne!( + if is_true { + Foo(0) + } else { + Foo(1) + }, + Foo(5) + ); + assert_ne!( + Foo(5), + if is_true { + Foo(0) + } else { + Foo(1) + } + ); + assert_ne!( + if is_true { + assert_eq!( + Foo(3), + Foo(3) + ); + Foo(0) + } else { + assert_ne!( + if is_true { + Foo(0) + } else { + Foo(1) + }, + Foo(5) + ); + Foo(1) + }, + Foo(5) + ); +} |
