Skip to content

Commit

Permalink
[lit] Fix internal diff's --strip-trailing-cr and use it
Browse files Browse the repository at this point in the history
Using GNU diff, `--strip-trailing-cr` removes a `\r` appearing before
a `\n` at the end of a line.  Without this patch, lit's internal diff
only removes `\r` if it appears as the last character.  That seems
useless.  This patch fixes that.

This patch also adds `--strip-trailing-cr` to some tests that fail on
Windows bots when D68664 is applied.  Based on what I see in the bot
logs, I think the following is happening.  In each test there, lit
diff is comparing a file with `\r\n` line endings to a file with `\n`
line endings.  Without D68664, lit diff reads those files with
Python's universal newlines support activated, causing `\r` to be
dropped.  However, with D68664, lit diff reads the files in binary
mode instead and thus reports that every line is different, just as
GNU diff does (at least under Ubuntu).  Adding `--strip-trailing-cr`
to those tests restores the previous behavior while permitting the
behavior of lit diff to be more like GNU diff.

Reviewed By: rnk

Differential Revision: https://reviews.llvm.org/D68839

llvm-svn: 374652
  • Loading branch information
jdenny-ornl committed Oct 12, 2019
1 parent 92a8294 commit 0f80927
Show file tree
Hide file tree
Showing 11 changed files with 82 additions and 13 deletions.
2 changes: 1 addition & 1 deletion llvm/test/MC/AsmParser/preserve-comments.s
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#RUN: llvm-mc -preserve-comments -n -triple i386-linux-gnu < %s > %t
#RUN: diff %s %t
#RUN: diff --strip-trailing-cr %s %t
.text

foo: #Comment here
Expand Down
2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-cxxmap/remap.test
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
RUN: llvm-cxxmap %S/Inputs/before.sym %S/Inputs/after.sym -r %S/Inputs/remap.map -o %t.output -Wambiguous -Wincomplete 2>&1 | FileCheck %s --allow-empty
RUN: diff %S/Inputs/expected %t.output
RUN: diff --strip-trailing-cr %S/Inputs/expected %t.output

CHECK-NOT: warning
CHECK-NOT: error
2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-profdata/profile-symbol-list.test
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
; RUN: llvm-profdata merge -sample -extbinary -prof-sym-list=%S/Inputs/profile-symbol-list-2.text %S/Inputs/sample-profile.proftext -o %t.2.output
; RUN: llvm-profdata merge -sample -extbinary %t.1.output %t.2.output -o %t.3.output
; RUN: llvm-profdata show -sample -show-prof-sym-list %t.3.output > %t.4.output
; RUN: diff %S/Inputs/profile-symbol-list.expected %t.4.output
; RUN: diff --strip-trailing-cr %S/Inputs/profile-symbol-list.expected %t.4.output
10 changes: 5 additions & 5 deletions llvm/test/tools/llvm-profdata/roundtrip.test
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
RUN: llvm-profdata merge -o %t.0.profdata %S/Inputs/IR_profile.proftext
RUN: llvm-profdata show -o %t.0.proftext -all-functions -text %t.0.profdata
RUN: diff %t.0.proftext %S/Inputs/IR_profile.proftext
RUN: diff --strip-trailing-cr %t.0.proftext %S/Inputs/IR_profile.proftext
RUN: llvm-profdata merge -o %t.1.profdata %t.0.proftext
RUN: llvm-profdata show -o %t.1.proftext -all-functions -text %t.1.profdata
RUN: diff %t.1.proftext %S/Inputs/IR_profile.proftext
RUN: diff --strip-trailing-cr %t.1.proftext %S/Inputs/IR_profile.proftext
RUN: llvm-profdata merge --sample --binary -output=%t.2.profdata %S/Inputs/sample-profile.proftext
RUN: llvm-profdata merge --sample --text -output=%t.2.proftext %t.2.profdata
RUN: diff %t.2.proftext %S/Inputs/sample-profile.proftext
RUN: diff --strip-trailing-cr %t.2.proftext %S/Inputs/sample-profile.proftext
# Round trip from text --> extbinary --> text
RUN: llvm-profdata merge --sample --extbinary -output=%t.3.profdata %S/Inputs/sample-profile.proftext
RUN: llvm-profdata merge --sample --text -output=%t.3.proftext %t.3.profdata
RUN: diff %t.3.proftext %S/Inputs/sample-profile.proftext
RUN: diff --strip-trailing-cr %t.3.proftext %S/Inputs/sample-profile.proftext
# Round trip from text --> binary --> extbinary --> text
RUN: llvm-profdata merge --sample --binary -output=%t.4.profdata %S/Inputs/sample-profile.proftext
RUN: llvm-profdata merge --sample --extbinary -output=%t.5.profdata %t.4.profdata
RUN: llvm-profdata merge --sample --text -output=%t.4.proftext %t.5.profdata
RUN: diff %t.4.proftext %S/Inputs/sample-profile.proftext
RUN: diff --strip-trailing-cr %t.4.proftext %S/Inputs/sample-profile.proftext
2 changes: 1 addition & 1 deletion llvm/test/tools/llvm-profdata/sample-remap.test
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
; RUN: llvm-profdata merge -sample -text %S/Inputs/sample-remap.proftext -r %S/Inputs/sample-remap.remap -o %t.output
; RUN: diff %S/Inputs/sample-remap.expected %t.output
; RUN: diff --strip-trailing-cr %S/Inputs/sample-remap.expected %t.output
2 changes: 1 addition & 1 deletion llvm/utils/lit/lit/builtin_commands/diff.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ def compose2(f, g):

f = lambda x: x
if flags.strip_trailing_cr:
f = compose2(lambda line: line.rstrip('\r'), f)
f = compose2(lambda line: line.replace('\r\n', '\n'), f)
if flags.ignore_all_space or flags.ignore_space_change:
ignoreSpace = lambda line, separator: separator.join(line.split())
ignoreAllSpaceOrSpaceChange = functools.partial(ignoreSpace, separator='' if flags.ignore_all_space else ' ')
Expand Down
3 changes: 3 additions & 0 deletions llvm/utils/lit/tests/Inputs/shtest-shell/diff-in.dos
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
In this file, the
sequence "\r\n"
terminates lines.
3 changes: 3 additions & 0 deletions llvm/utils/lit/tests/Inputs/shtest-shell/diff-in.unix
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
In this file, the
sequence "\n"
terminates lines.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Check behavior of --strip-trailing-cr.

# RUN: diff -u diff-in.dos diff-in.unix && false || true
# RUN: diff -u diff-in.unix diff-in.dos && false || true

# RUN: diff -u --strip-trailing-cr diff-in.dos diff-in.unix && false || true
# RUN: diff -u --strip-trailing-cr diff-in.unix diff-in.dos && false || true

# Fail so lit will print output.
# RUN: false
2 changes: 1 addition & 1 deletion llvm/utils/lit/tests/max-failures.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#
# END.

# CHECK: Failing Tests (31)
# CHECK: Failing Tests (32)
# CHECK: Failing Tests (1)
# CHECK: Failing Tests (2)
# CHECK: error: argument --max-failures: requires positive integer, but found '0'
57 changes: 55 additions & 2 deletions llvm/utils/lit/tests/shtest-shell.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
# FIXME: Temporarily dump test output so we can debug failing tests on
# buildbots.
# RUN: cat %t.out
# RUN: FileCheck --input-file %t.out %s
# RUN: FileCheck --dump-input=fail --color -vv --input-file %t.out %s
#
# END.

Expand Down Expand Up @@ -332,6 +332,59 @@
# CHECK: PASS: shtest-shell :: diff-r.txt


# CHECK: FAIL: shtest-shell :: diff-strip-trailing-cr.txt

# CHECK: *** TEST 'shtest-shell :: diff-strip-trailing-cr.txt' FAILED ***

# CHECK: $ "diff" "-u" "diff-in.dos" "diff-in.unix"
# CHECK: # command output:
# CHECK: @@
# CHECK-NEXT: -In this file, the
# CHECK-NEXT: -sequence "\r\n"
# CHECK-NEXT: -terminates lines.
# CHECK-NEXT: +In this file, the
# CHECK-NEXT: +sequence "\n"
# CHECK-NEXT: +terminates lines.
# CHECK: error: command failed with exit status: 1
# CHECK: $ "true"

# CHECK: $ "diff" "-u" "diff-in.unix" "diff-in.dos"
# CHECK: # command output:
# CHECK: @@
# CHECK-NEXT: -In this file, the
# CHECK-NEXT: -sequence "\n"
# CHECK-NEXT: -terminates lines.
# CHECK-NEXT: +In this file, the
# CHECK-NEXT: +sequence "\r\n"
# CHECK-NEXT: +terminates lines.
# CHECK: error: command failed with exit status: 1
# CHECK: $ "true"

# CHECK: $ "diff" "-u" "--strip-trailing-cr" "diff-in.dos" "diff-in.unix"
# CHECK: # command output:
# CHECK: @@
# CHECK-NEXT: In this file, the
# CHECK-NEXT: -sequence "\r\n"
# CHECK-NEXT: +sequence "\n"
# CHECK-NEXT: terminates lines.
# CHECK: error: command failed with exit status: 1
# CHECK: $ "true"

# CHECK: $ "diff" "-u" "--strip-trailing-cr" "diff-in.unix" "diff-in.dos"
# CHECK: # command output:
# CHECK: @@
# CHECK-NEXT: In this file, the
# CHECK-NEXT: -sequence "\n"
# CHECK-NEXT: +sequence "\r\n"
# CHECK-NEXT: terminates lines.
# CHECK: error: command failed with exit status: 1
# CHECK: $ "true"

# CHECK: $ "false"

# CHECK: ***


# CHECK: FAIL: shtest-shell :: diff-unified.txt

# CHECK: *** TEST 'shtest-shell :: diff-unified.txt' FAILED ***
Expand Down Expand Up @@ -486,4 +539,4 @@
# CHECK: PASS: shtest-shell :: sequencing-0.txt
# CHECK: XFAIL: shtest-shell :: sequencing-1.txt
# CHECK: PASS: shtest-shell :: valid-shell.txt
# CHECK: Failing Tests (31)
# CHECK: Failing Tests (32)

0 comments on commit 0f80927

Please sign in to comment.