psamolysov created this revision.
psamolysov added reviewers: dergachev.a, clang.
psamolysov added a project: clang.
Herald added a subscriber: cfe-commits.

When I run the 'exploded-graph-rewriter.py' tool on Windows using Python 3.5 
and above, the following error and stack trace occurs:

  Traceback (most recent call last):
    File 
"C:\Work\Dev\llvm\llvm-monorepo\clang\utils\analyzer\exploded-graph-rewriter.py",
 line 1061, in <module>
      main()
    File 
"C:\Work\Dev\llvm\llvm-monorepo\clang\utils\analyzer\exploded-graph-rewriter.py",
 line 1057, in main
      explorer.explore(graph, visitor)
    File 
"C:\Work\Dev\llvm\llvm-monorepo\clang\utils\analyzer\exploded-graph-rewriter.py",
 line 911, in explore
      visitor.visit_end_of_graph()
    File 
"C:\Work\Dev\llvm\llvm-monorepo\clang\utils\analyzer\exploded-graph-rewriter.py",
 line 879, in visit_end_of_graph
      svg = graphviz.pipe('dot', 'svg', self.output())
    File "C:\Program Files\Python37\lib\site-packages\graphviz\backend.py", 
line 229, in pipe
      out, _ = run(cmd, input=data, capture_output=True, check=True, 
quiet=quiet)
    File "C:\Program Files\Python37\lib\site-packages\graphviz\backend.py", 
line 166, in run
      out, err = proc.communicate(input)
    File "C:\Program Files\Python37\lib\subprocess.py", line 920, in communicate
      stdout, stderr = self._communicate(input, endtime, timeout)
    File "C:\Program Files\Python37\lib\subprocess.py", line 1238, in 
_communicate
      self._stdin_write(input)
    File "C:\Program Files\Python37\lib\subprocess.py", line 854, in 
_stdin_write
      self.stdin.write(input)
  TypeError: a bytes-like object is required, not 'str'

Due to work with Unicode in Python begin from 3.5, the output string must be 
encoded, so I put the code to detect whether the script works on Python 3.5+ 
and use the encode() method if so. After this manipulations, the 
exploded-graph-rewriter.py script works fine on Windows and Python 3.7.

I haven't tried the script on Python 2


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D71746

Files:
  clang/utils/analyzer/exploded-graph-rewriter.py


Index: clang/utils/analyzer/exploded-graph-rewriter.py
===================================================================
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -18,6 +18,7 @@
 import logging
 import os
 import re
+import sys
 
 
 #===-----------------------------------------------------------------------===#
@@ -425,7 +426,10 @@
 
     def output(self):
         assert not self._dump_dot_only
-        return ''.join(self._output)
+        if sys.version_info[0] > 2 and sys.version_info[1] >= 5:
+            return ''.join(self._output).encode()
+        else:
+            return ''.join(self._output)
 
     def _dump(self, s):
         s = s.replace('&', '&amp;') \


Index: clang/utils/analyzer/exploded-graph-rewriter.py
===================================================================
--- clang/utils/analyzer/exploded-graph-rewriter.py
+++ clang/utils/analyzer/exploded-graph-rewriter.py
@@ -18,6 +18,7 @@
 import logging
 import os
 import re
+import sys
 
 
 #===-----------------------------------------------------------------------===#
@@ -425,7 +426,10 @@
 
     def output(self):
         assert not self._dump_dot_only
-        return ''.join(self._output)
+        if sys.version_info[0] > 2 and sys.version_info[1] >= 5:
+            return ''.join(self._output).encode()
+        else:
+            return ''.join(self._output)
 
     def _dump(self, s):
         s = s.replace('&', '&amp;') \
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to