[Lldb-commits] [PATCH] D53166: [lldbsuite] Fix the filecheck functionality to work with Python 3

Zachary Turner via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Thu Oct 11 13:51:34 PDT 2018

zturner added inline comments.

Comment at: packages/Python/lldbsuite/test/lldbtest.py:2230-2233
+        # In Python 2, communicate sends byte strings. In Python 3, communicate sends bytes.
+        # If we got a string (and not a byte string), encode it before sending.
+        if isinstance(output, str) and not isinstance(output, bytes):
+            output = output.encode()
Ok I had to stare at this for a long time to figure out what was going on.  I think you need to update the comment here, because it makes it sounds like `output` is the result of a `Popen.communicate`.  But `output` is the result of a `debugger.HandleCommand()`.  

I think we should actually just leave this the way it was and fix it in the call to `Popen` (see below)

Comment at: packages/Python/lldbsuite/test/lldbtest.py:2247-2249
         subproc = Popen(filecheck_args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
         cmd_stdout, cmd_stderr = subproc.communicate(input=output)
         cmd_status = subproc.returncode
If I'm not mistaken, Python 3 can accept `stdin` as `bytes` or `string`, and either will work, it depends on the value of `universal_newlines`, and `stdout` will be in whatever format `stdin` was in.  If we pass `universal_newlines=True`, then it will expect a `string` and output a `string`, otherwise it expects a `bytes` and output a `bytes`.  Given that `FileCheck` is supposed to operate on textual data and not binary data, perhaps we should be doing that here?



More information about the lldb-commits mailing list