[llvm] [LIT] Fix env without subcommand causing early return in pipeline (PR #184028)
Aaron Chen via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 2 10:59:19 PST 2026
https://github.com/nailo2c updated https://github.com/llvm/llvm-project/pull/184028
>From 6b91ffc99263e29ed90f0cf63ada26beedae6253 Mon Sep 17 00:00:00 2001
From: nailo2c <nailo2c at gmail.com>
Date: Sun, 1 Mar 2026 11:04:18 -0800
Subject: [PATCH 1/2] [LIT] Fix env without subcommand causing early return in
pipeline
---
llvm/utils/lit/lit/TestRunner.py | 30 +++++++++++++------
.../shtest-env-positive/env-calls-env.txt | 14 ++++-----
.../Inputs/shtest-env-positive/env-i.txt | 10 +++----
.../shtest-env-positive/env-no-subcommand.txt | 3 +-
.../Inputs/shtest-env-positive/env-u.txt | 6 ++--
.../tests/Inputs/shtest-env-positive/env.txt | 8 ++---
.../Inputs/shtest-env-positive/mixed.txt | 8 ++---
7 files changed, 45 insertions(+), 34 deletions(-)
diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py
index 9e5c7d253a236..b2f67b4b7340c 100644
--- a/llvm/utils/lit/lit/TestRunner.py
+++ b/llvm/utils/lit/lit/TestRunner.py
@@ -831,16 +831,28 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper):
cmd_shenv = ShellEnvironment(shenv.cwd, shenv.env, shenv.umask)
args = updateEnv(cmd_shenv, args)
if not args:
- # Return the environment variables if no argument is provided.
- env_str = "\n".join(
- f"{key}={value}" for key, value in sorted(cmd_shenv.env.items())
- )
- results.append(
- ShellCommandResult(
- j, env_str, "", 0, timeoutHelper.timeoutReached(), []
+ if len(cmd.commands) == 1:
+ # Single command: return environment variables in-process.
+ env_str = "\n".join(
+ f"{key}={value}" for key, value in sorted(cmd_shenv.env.items())
)
- )
- return 0
+ results.append(
+ ShellCommandResult(
+ j, env_str, "", 0, timeoutHelper.timeoutReached(), []
+ )
+ )
+ return 0
+ # Pipeline: replace with a subprocess that prints the
+ # environment variables to stdout so the output can be
+ # piped to the next command.
+ args = [
+ sys.executable,
+ "-c",
+ "import os, sys; sys.stdout.write("
+ "'\\n'.join(k + '=' + v"
+ " for k, v in sorted(os.environ.items())) + '\\n')",
+ ]
+ break
elif args[0] == "not":
not_args.append(args.pop(0))
not_count += 1
diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-calls-env.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-calls-env.txt
index ee40c60a1e4b6..bf96212468998 100644
--- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-calls-env.txt
+++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-calls-env.txt
@@ -3,14 +3,14 @@
## Check that internal env can call internal env.
# RUN: env env | FileCheck -check-prefix=CHECK-2-EMPTY-ARGS %s
#
-# CHECK-2-EMPTY-ARGS: BAR = 2
-# CHECK-2-EMPTY-ARGS: FOO = 1
+# CHECK-2-EMPTY-ARGS: BAR=2
+# CHECK-2-EMPTY-ARGS: FOO=1
## Check setting variables in a nested env call.
# RUN: env FOO=2 env BAR=1 | FileCheck -check-prefix=CHECK-2-VAL %s
#
-# CHECK-2-VAL: BAR = 1
-# CHECK-2-VAL: FOO = 2
+# CHECK-2-VAL: BAR=1
+# CHECK-2-VAL: FOO=2
## Check unsetting variables in a nested env call.
# RUN: env -u FOO env -u BAR | FileCheck -check-prefix=CHECK-2-U %s
@@ -22,11 +22,11 @@
# RUN: env -u FOO BAR=1 env -u BAR FOO=2 | FileCheck -check-prefix=CHECK-2-U-VAL %s
#
# CHECK-2-U-VAL-NOT: BAR
-# CHECK-2-U-VAL: FOO = 2
+# CHECK-2-U-VAL: FOO=2
## Check setting, unsetting, and adding a new variable in nested env calls.
# RUN: env -u FOO BAR=1 env -u BAR FOO=2 env BAZ=3 | FileCheck -check-prefix=CHECK-3 %s
#
# CHECK-3-NOT: BAR
-# CHECK-3: BAZ = 3
-# CHECK-3: FOO = 2
+# CHECK-3: BAZ=3
+# CHECK-3: FOO=2
diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-i.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-i.txt
index 2a66db1d48d05..5396cf8adda69 100644
--- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-i.txt
+++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-i.txt
@@ -5,19 +5,19 @@
# RUN: env | FileCheck --check-prefix=CHECK-ENV-PRESET %s
## Check clearing the entire environment.
#
-# RUN: env -i | FileCheck --check-prefix=CHECK-ENV-CLEAR-1 %s
+# RUN: env -i | FileCheck --check-prefix=CHECK-ENV-CLEAR %s
#
## Check setting a variable in a clear environment.
#
-# RUN: env -i BAZ=3 | FileCheck --check-prefix=CHECK-ENV-ONE-1 %s
+# RUN: env -i BAZ=3 | FileCheck --check-prefix=CHECK-ENV-ONE %s
#
-# CHECK-ENV-PRESET: BAR = 2
-# CHECK-ENV-PRESET: FOO = 1
+# CHECK-ENV-PRESET: BAR=2
+# CHECK-ENV-PRESET: FOO=1
# CHECK-ENV-CLEAR-NOT: BAR
# CHECK-ENV-CLEAR-NOT: FOO
# CHECK-ENV-ONE-NOT: BAR
-# CHECK-ENV-ONE: BAZ = 3
+# CHECK-ENV-ONE: BAZ=3
# CHECK-ENV-ONE-NOT: FOO
diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt
index dded9069c44f2..235b744b52acb 100644
--- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt
+++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-no-subcommand.txt
@@ -1,5 +1,4 @@
## Tests the env command in various scenarios: without arguments, setting, unsetting, and mixing envrionment variables.
-# FIXME: All of these tests are broken and will not even call FileCheck.
## Check default environment.
# RUN: env | FileCheck -check-prefix=NO-ARGS %s
@@ -30,7 +29,7 @@
# MIXED-SET-UNSET: QUX=3
## Mixed set and unset with additional variable.
-# RUN: env -u FOO BAR=1 -u BAR FOO=2 BAZ=4 | FileCheck -check-prefix=MIXED-SET-UNSET-ADD-3 %s
+# RUN: env -u FOO BAR=1 -u BAR FOO=2 BAZ=4 | FileCheck -check-prefix=MIXED-SET-UNSET-ADD %s
#
# MIXED-SET-UNSET-ADD-NOT: BAR
# MIXED-SET-UNSET-ADD: BAZ=4
diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-u.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-u.txt
index 2945639c0642d..810d11ceb7c49 100644
--- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-u.txt
+++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env-u.txt
@@ -12,10 +12,10 @@
#
# RUN: env -u FOO -u BAR | FileCheck --check-prefix=CHECK-ENV-UNSET-MULTIPLE %s
-# CHECK-ENV-PRESET: BAR = 2
-# CHECK-ENV-PRESET: FOO = 1
+# CHECK-ENV-PRESET: BAR=2
+# CHECK-ENV-PRESET: FOO=1
-# CHECK-ENV-UNSET-1: BAR = 2
+# CHECK-ENV-UNSET-1: BAR=2
# CHECK-ENV-UNSET-1-NOT: FOO
# CHECK-ENV-UNSET-MULTIPLE-NOT: BAR
diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env.txt
index 74a2a65d260f4..4dff8ab4370e5 100644
--- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/env.txt
+++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/env.txt
@@ -8,8 +8,8 @@
#
# RUN: env A_FOO=1 B_BAR=2 C_OOF=3 | FileCheck --check-prefix=CHECK-ENV-MULTIPLE %s
-# CHECK-ENV-1: A_FOO = 999
+# CHECK-ENV-1: A_FOO=999
-# CHECK-ENV-MULTIPLE: A_FOO = 1
-# CHECK-ENV-MULTIPLE: B_BAR = 2
-# CHECK-ENV-MULTIPLE: C_OOF = 3
+# CHECK-ENV-MULTIPLE: A_FOO=1
+# CHECK-ENV-MULTIPLE: B_BAR=2
+# CHECK-ENV-MULTIPLE: C_OOF=3
diff --git a/llvm/utils/lit/tests/Inputs/shtest-env-positive/mixed.txt b/llvm/utils/lit/tests/Inputs/shtest-env-positive/mixed.txt
index c2c4e8bfdfc8b..7ee4f5226a926 100644
--- a/llvm/utils/lit/tests/Inputs/shtest-env-positive/mixed.txt
+++ b/llvm/utils/lit/tests/Inputs/shtest-env-positive/mixed.txt
@@ -8,11 +8,11 @@
#
# RUN: env A_FOO=1 -u FOO B_BAR=2 -u BAR C_OOF=3 | FileCheck --check-prefix=CHECK-ENV-MULTIPLE %s
-# CHECK-ENV-1: A_FOO = 999
+# CHECK-ENV-1: A_FOO=999
# CHECK-ENV-1-NOT: FOO
-# CHECK-ENV-MULTIPLE: A_FOO = 1
+# CHECK-ENV-MULTIPLE: A_FOO=1
# CHECK-ENV-MULTIPLE-NOT: BAR
-# CHECK-ENV-MULTIPLE: B_BAR = 2
-# CHECK-ENV-MULTIPLE: C_OOF = 3
+# CHECK-ENV-MULTIPLE: B_BAR=2
+# CHECK-ENV-MULTIPLE: C_OOF=3
# CHECK-ENV-MULTIPLE-NOT: FOO
>From 868775dbf3e2b4f45d7773fde21a7d155723f4b2 Mon Sep 17 00:00:00 2001
From: nailo2c <nailo2c at gmail.com>
Date: Mon, 2 Mar 2026 10:59:03 -0800
Subject: [PATCH 2/2] fix CI error: code_formatter
---
llvm/utils/lit/lit/TestRunner.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py
index b2f67b4b7340c..8fdf7b6a114c4 100644
--- a/llvm/utils/lit/lit/TestRunner.py
+++ b/llvm/utils/lit/lit/TestRunner.py
@@ -834,7 +834,8 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper):
if len(cmd.commands) == 1:
# Single command: return environment variables in-process.
env_str = "\n".join(
- f"{key}={value}" for key, value in sorted(cmd_shenv.env.items())
+ f"{key}={value}"
+ for key, value in sorted(cmd_shenv.env.items())
)
results.append(
ShellCommandResult(
More information about the llvm-commits
mailing list