Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions llvm/utils/lit/lit/TestRunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -600,20 +600,31 @@ def executeBuiltinUmask(cmd, shenv):

def executeBuiltinUlimit(cmd, shenv):
"""executeBuiltinUlimit - Change the current limits."""
if os.name != "posix":
try:
# Try importing the resource module (available on POSIX systems) and
# emit an error where it does not exist (e.g., Windows).
import resource
except ImportError:
raise InternalShellError(cmd, "'ulimit' not supported on this system")
if len(cmd.args) != 3:
raise InternalShellError(cmd, "'ulimit' requires two arguments")
try:
new_limit = int(cmd.args[2])
if cmd.args[2] == "unlimited":
new_limit = resource.RLIM_INFINITY
else:
new_limit = int(cmd.args[2])
except ValueError as err:
raise InternalShellError(cmd, "Error: 'ulimit': %s" % str(err))
if cmd.args[1] == "-v":
shenv.ulimit["RLIMIT_AS"] = new_limit * 1024
if new_limit != resource.RLIM_INFINITY:
new_limit = new_limit * 1024
shenv.ulimit["RLIMIT_AS"] = new_limit
elif cmd.args[1] == "-n":
shenv.ulimit["RLIMIT_NOFILE"] = new_limit
elif cmd.args[1] == "-s":
shenv.ulimit["RLIMIT_STACK"] = new_limit * 1024
if new_limit != resource.RLIM_INFINITY:
new_limit = new_limit * 1024
shenv.ulimit["RLIMIT_STACK"] = new_limit
elif cmd.args[1] == "-f":
shenv.ulimit["RLIMIT_FSIZE"] = new_limit
else:
Expand Down Expand Up @@ -815,6 +826,10 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper):
not_args = []
not_count = 0
not_crash = False

# Expand all late substitutions.
args = _expandLateSubstitutions(j, args, cmd_shenv.cwd)

while True:
if args[0] == "env":
# Create a copy of the global environment and modify it for
Expand Down Expand Up @@ -864,9 +879,6 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper):
# Ensure args[0] is hashable.
args[0] = expand_glob(args[0], cmd_shenv.cwd)[0]

# Expand all late substitutions.
args = _expandLateSubstitutions(j, args, cmd_shenv.cwd)

inproc_builtin = inproc_builtins.get(args[0], None)
if inproc_builtin and (args[0] != "echo" or len(cmd.commands) == 1):
# env calling an in-process builtin is useless, so we take the safe
Expand Down
6 changes: 6 additions & 0 deletions llvm/utils/lit/tests/Inputs/shtest-readfile/env.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
## Tests that readfile works with the env builtin.
# RUN: echo -n "hello" > %t.1
# RUN: env TEST=%{readfile:%t.1} python3 -c "import os; print(os.environ['TEST'])"

## Fail the test so we can assert on the output.
# RUN: not echo return
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# RUN: ulimit -f 5
# RUN: %{python} %S/print_limits.py
# RUN: ulimit -f unlimited
# RUN: %{python} %S/print_limits.py
# Fail the test so that we can assert on the output.
# RUN: not echo return
2 changes: 1 addition & 1 deletion llvm/utils/lit/tests/shtest-readfile-external.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# UNSUPPORTED: system-windows
# RUN: env LIT_USE_INTERNAL_SHELL=0 not %{lit} -a -v %{inputs}/shtest-readfile | FileCheck -match-full-lines -DTEMP_PATH=%S/Inputs/shtest-readfile/Output %s

# CHECK: -- Testing: 4 tests{{.*}}
# CHECK: -- Testing: 5 tests{{.*}}

# CHECK-LABEL: FAIL: shtest-readfile :: absolute-paths.txt ({{[^)]*}})
# CHECK: echo $(cat [[TEMP_PATH]]/absolute-paths.txt.tmp) && test -e [[TEMP_PATH]]/absolute-paths.txt.tmp {{.*}}
Expand Down
6 changes: 5 additions & 1 deletion llvm/utils/lit/tests/shtest-readfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,16 @@

# RUN: env LIT_USE_INTERNAL_SHELL=1 not %{lit} -a -v %{inputs}/shtest-readfile | FileCheck -match-full-lines -DTEMP_PATH=%S%{fs-sep}Inputs%{fs-sep}shtest-readfile%{fs-sep}Output %s

# CHECK: -- Testing: 4 tests{{.*}}
# CHECK: -- Testing: 5 tests{{.*}}

# CHECK-LABEL: FAIL: shtest-readfile :: absolute-paths.txt ({{[^)]*}})
# CHECK: echo hello
# CHECK: # executed command: echo '%{readfile:[[TEMP_PATH]]{{[\\\/]}}absolute-paths.txt.tmp}'

# CHECK-LABEL: FAIL: shtest-readfile :: env.txt ({{[^)]*}})
# CHECK: env TEST=hello python3 -c "import os; print(os.environ['TEST'])"
# CHECK: # | hello

# CHECK-LABEL: FAIL: shtest-readfile :: file-does-not-exist.txt ({{[^)]*}})
# CHECK: # executed command: @echo 'echo %{readfile:/file/does/not/exist}'
# CHECK: # | File specified in readfile substitution does not exist: {{.*}}/file/does/not/exist
Expand Down
8 changes: 7 additions & 1 deletion llvm/utils/lit/tests/shtest-ulimit.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# RUN: not %{lit} -a -v %{inputs}/shtest-ulimit --order=lexical \
# RUN: | FileCheck -DBASE_NOFILE_LIMIT=%{readfile:%t.nofile_limit} %s

# CHECK: -- Testing: 3 tests{{.*}}
# CHECK: -- Testing: 4 tests{{.*}}

# CHECK-LABEL: FAIL: shtest-ulimit :: ulimit-bad-arg.txt ({{[^)]*}})
# CHECK: ulimit -n
Expand All @@ -25,3 +25,9 @@

# CHECK-LABEL: FAIL: shtest-ulimit :: ulimit_reset.txt ({{[^)]*}})
# CHECK: RLIMIT_NOFILE=[[BASE_NOFILE_LIMIT]]

# CHECK-LABEL: FAIL: shtest-ulimit :: ulimit_unlimited.txt ({{[^)]*}})
# CHECK: ulimit -f 5
# CHECK: RLIMIT_FSIZE=5
# CHECK: ulimit -f unlimited
# CHECK: RLIMIT_FSIZE=-1
Loading