From b3d55004870beb653be9e0704f43995b83654f21 Mon Sep 17 00:00:00 2001 From: Zalathar Date: Thu, 4 May 2023 11:22:50 +1000 Subject: [PATCH 1/2] Portably escape pipe characters in `diff --ignore-matching-lines` regexes --- tests/run-make/coverage-reports/Makefile | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tests/run-make/coverage-reports/Makefile b/tests/run-make/coverage-reports/Makefile index d4ae03e590a30..fd4968d07020d 100644 --- a/tests/run-make/coverage-reports/Makefile +++ b/tests/run-make/coverage-reports/Makefile @@ -174,7 +174,13 @@ else # files are redundant, so there is no need to generate `expected_*.json` files or # compare actual JSON results.) - $(DIFF) --ignore-matching-lines='^ \| .*::<.*>.*:$$' --ignore-matching-lines='^ \| <.*>::.*:$$' \ + # CAUTION: GNU diff and Apple/FreeBSD diff use slightly different regex dialects. + # GNU diff treats `|` as a literal pipe character, and `\|` as a regex OR operator. + # Apple/FreeBSD diff treats `|` as a regex OR operator, and `|` as a literal pipe. + # To match a literal pipe character in both implementations, we need to wrap it in + # a character class `[|]` instead. Nobody is happy about this. + + $(DIFF) --ignore-matching-lines='^ [|] .*::<.*>.*:$$' --ignore-matching-lines='^ [|] <.*>::.*:$$' \ expected_show_coverage.$@.txt "$(TMPDIR)"/actual_show_coverage.$@.txt || \ ( grep -q '^\/\/ ignore-llvm-cov-show-diffs' $(SOURCEDIR)/$@.rs && \ >&2 echo 'diff failed, but suppressed with `// ignore-llvm-cov-show-diffs` in $(SOURCEDIR)/$@.rs' \ From 379d96b634c3df32ccd87541dfceeaa42f3ae730 Mon Sep 17 00:00:00 2001 From: Zalathar Date: Thu, 4 May 2023 11:29:54 +1000 Subject: [PATCH 2/2] Update snapshot `expected_show_coverage.async.txt` This snapshot fell out of sync while the `diff --ignore-matching-lines` regexes were silently broken on Linux. --- .../coverage-reports/expected_show_coverage.async.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/run-make/coverage-reports/expected_show_coverage.async.txt b/tests/run-make/coverage-reports/expected_show_coverage.async.txt index 87ccb6c43eab3..93c1535b06b50 100644 --- a/tests/run-make/coverage-reports/expected_show_coverage.async.txt +++ b/tests/run-make/coverage-reports/expected_show_coverage.async.txt @@ -41,9 +41,9 @@ 41| 1| // executed asynchronously. 42| 1| match x { 43| 1| y if c(x).await == y + 1 => { d().await; } - ^0 ^0 ^0 ^0 + ^0 ^0 ^0 ^0 44| 1| y if f().await == y + 1 => (), - ^0 ^0 ^0 + ^0 ^0 ^0 45| 1| _ => (), 46| | } 47| 1|}