| ## Test that when writing to a closed stdout, LLVM tools finish with a non-zero |
| ## exit code and an error message on stderr. The test uses llvm-cxxfilt, but |
| ## it's a logic from the default SIGPIPE handler, so it applies to all the tools. |
| ## This is required for UNIX03 conformance. |
| |
| # UNSUPPORTED: system-windows |
| |
| # RUN: not %python %s llvm-cxxfilt 2>&1 | FileCheck %s |
| # CHECK: error: write on a pipe with no reader |
| |
| import subprocess |
| import sys |
| |
| with subprocess.Popen([sys.argv[1]], stdout=subprocess.PIPE, stdin=subprocess.PIPE) as process: |
| process.stdout.close() |
| |
| # llvm-cxxfilt with no extra arguments runs interactively and writes input |
| # to output. Writing continuously to stdin should trigger SIGPIPE when the |
| # subprocess attempts to write out bytes to a closed stdout. |
| try: |
| while True: |
| process.stdin.write("foo\n".encode("utf-8")) |
| except BrokenPipeError: |
| # Clear stdin, pipe is broken and closing it on cleanup will raise an exception. |
| process.stdin = None |
| sys.exit(process.returncode) |