[clang] aaf7aa3 - [clang][utils] Make CmpDriver Python3 compatible (#163740)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 31 02:49:20 PDT 2025
Author: David Spickett
Date: 2025-10-31T09:49:16Z
New Revision: aaf7aa3c2f0a5c050902b257660fb4eda390e83e
URL: https://github.com/llvm/llvm-project/commit/aaf7aa3c2f0a5c050902b257660fb4eda390e83e
DIFF: https://github.com/llvm/llvm-project/commit/aaf7aa3c2f0a5c050902b257660fb4eda390e83e.diff
LOG: [clang][utils] Make CmpDriver Python3 compatible (#163740)
The majority of this is running 2to3 on it:
* print is a function in 3.x
* next(it) instead of it.next()
Then there was a use of "map(None, iterables..)"
which in Python 2 was a way of saying
"combine these iterables, and if one is shorter,
pad with None".
This no longer works in Python3, the equivalent
is zip_longest:
https://docs.python.org/3/library/itertools.html#itertools.zip_longest
fillvalue defaults to None but I made it explicit
since it may help someone debugging this script
in future.
(I doubt it has been used for a very long time)
Added:
Modified:
clang/utils/CmpDriver
Removed:
################################################################################
diff --git a/clang/utils/CmpDriver b/clang/utils/CmpDriver
index 12ce7a3250f66..0732baa76d01c 100755
--- a/clang/utils/CmpDriver
+++ b/clang/utils/CmpDriver
@@ -5,6 +5,7 @@ A simple utility that compares tool invocations and exit codes issued by
compiler drivers that support -### (e.g. gcc and clang).
"""
+from itertools import zip_longest
import subprocess
def splitArgs(s):
@@ -22,7 +23,7 @@ def splitArgs(s):
elif inQuote:
if c == '\\':
current += c
- current += it.next()
+ current += next(it)
else:
current += c
elif not c.isspace():
@@ -135,77 +136,77 @@ def main():
# Compare stdout.
if infoA.stdout != infoB.stdout:
- print '-- STDOUT DIFFERS -'
- print 'A OUTPUT: ',infoA.stdout
- print 'B OUTPUT: ',infoB.stdout
- print
+ print('-- STDOUT DIFFERS -')
+ print('A OUTPUT: ',infoA.stdout)
+ print('B OUTPUT: ',infoB.stdout)
+ print()
diff = ZipperDiff(infoA.stdout.split('\n'),
infoB.stdout.split('\n'))
for i,(aElt,bElt) in enumerate(
diff .getDiffs()):
if aElt is None:
- print 'A missing: %s' % bElt
+ print('A missing: %s' % bElt)
elif bElt is None:
- print 'B missing: %s' % aElt
+ print('B missing: %s' % aElt)
else:
- print 'mismatch: A: %s' % aElt
- print ' B: %s' % bElt
+ print('mismatch: A: %s' % aElt)
+ print(' B: %s' % bElt)
diff er = True
# Compare stderr.
if infoA.stderr != infoB.stderr:
- print '-- STDERR DIFFERS -'
- print 'A STDERR: ',infoA.stderr
- print 'B STDERR: ',infoB.stderr
- print
+ print('-- STDERR DIFFERS -')
+ print('A STDERR: ',infoA.stderr)
+ print('B STDERR: ',infoB.stderr)
+ print()
diff = ZipperDiff(infoA.stderr.split('\n'),
infoB.stderr.split('\n'))
for i,(aElt,bElt) in enumerate(
diff .getDiffs()):
if aElt is None:
- print 'A missing: %s' % bElt
+ print('A missing: %s' % bElt)
elif bElt is None:
- print 'B missing: %s' % aElt
+ print('B missing: %s' % aElt)
else:
- print 'mismatch: A: %s' % aElt
- print ' B: %s' % bElt
+ print('mismatch: A: %s' % aElt)
+ print(' B: %s' % bElt)
diff er = True
# Compare commands.
- for i,(a,b) in enumerate(map(None, infoA.commands, infoB.commands)):
+ for i,(a,b) in enumerate(zip_longest(infoA.commands, infoB.commands, fillvalue=None)):
if a is None:
- print 'A MISSING:',' '.join(b)
+ print('A MISSING:',' '.join(b))
diff er = True
continue
elif b is None:
- print 'B MISSING:',' '.join(a)
+ print('B MISSING:',' '.join(a))
diff er = True
continue
diff = DriverZipperDiff(a,b)
diff s = list(
diff .getDiffs())
if
diff s:
- print '-- COMMAND %d DIFFERS -' % i
- print 'A COMMAND:',' '.join(a)
- print 'B COMMAND:',' '.join(b)
- print
+ print('-- COMMAND %d DIFFERS -' % i)
+ print('A COMMAND:',' '.join(a))
+ print('B COMMAND:',' '.join(b))
+ print()
for i,(aElt,bElt) in enumerate(
diff s):
if aElt is None:
- print 'A missing: %s' % bElt
+ print('A missing: %s' % bElt)
elif bElt is None:
- print 'B missing: %s' % aElt
+ print('B missing: %s' % aElt)
else:
- print 'mismatch: A: %s' % aElt
- print ' B: %s' % bElt
+ print('mismatch: A: %s' % aElt)
+ print(' B: %s' % bElt)
diff er = True
# Compare result codes.
if infoA.exitCode != infoB.exitCode:
- print '-- EXIT CODES DIFFER -'
- print 'A: ',infoA.exitCode
- print 'B: ',infoB.exitCode
+ print('-- EXIT CODES DIFFER -')
+ print('A: ',infoA.exitCode)
+ print('B: ',infoB.exitCode)
diff er = True
if
diff er:
More information about the cfe-commits
mailing list