summaryrefslogtreecommitdiff
path: root/llvm/test/Support/unix03-sigpipe-exit.test
blob: 01680841db00118b83490734554f653b310ef6a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
## 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)