summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-08-22 23:39:50 (GMT)
committerGitHub <noreply@github.com>2023-08-22 23:39:50 (GMT)
commit3a1ac87f8f89d3206b46a0df4908afae629d669d (patch)
treefe014a0f1ad35114855a803d5a0841b06f3e19b0 /Lib/test
parenta0bb4a39d1ca10e4a75f50a9fbe90cc9db28d29e (diff)
downloadcpython-3a1ac87f8f89d3206b46a0df4908afae629d669d.zip
cpython-3a1ac87f8f89d3206b46a0df4908afae629d669d.tar.gz
cpython-3a1ac87f8f89d3206b46a0df4908afae629d669d.tar.bz2
gh-90791: test.pythoninfo logs ASAN_OPTIONS env var (#108289)
* Cleanup libregrtest code logging ASAN_OPTIONS. * Fix a typo on "ASAN_OPTIONS" vs "MSAN_OPTIONS".
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/libregrtest/main.py41
-rw-r--r--Lib/test/pythoninfo.py7
-rw-r--r--Lib/test/support/__init__.py16
3 files changed, 39 insertions, 25 deletions
diff --git a/Lib/test/libregrtest/main.py b/Lib/test/libregrtest/main.py
index 9001ca3..3611891 100644
--- a/Lib/test/libregrtest/main.py
+++ b/Lib/test/libregrtest/main.py
@@ -526,26 +526,33 @@ class Regrtest:
print("== CPU count:", cpu_count)
print("== encodings: locale=%s, FS=%s"
% (locale.getencoding(), sys.getfilesystemencoding()))
+ self.display_sanitizers()
+
+ def display_sanitizers(self):
+ # This makes it easier to remember what to set in your local
+ # environment when trying to reproduce a sanitizer failure.
asan = support.check_sanitizer(address=True)
msan = support.check_sanitizer(memory=True)
ubsan = support.check_sanitizer(ub=True)
- # This makes it easier to remember what to set in your local
- # environment when trying to reproduce a sanitizer failure.
- if asan or msan or ubsan:
- names = [n for n in (asan and "address",
- msan and "memory",
- ubsan and "undefined behavior")
- if n]
- print(f"== sanitizers: {', '.join(names)}")
- a_opts = os.environ.get("ASAN_OPTIONS")
- if asan and a_opts is not None:
- print(f"== ASAN_OPTIONS={a_opts}")
- m_opts = os.environ.get("ASAN_OPTIONS")
- if msan and m_opts is not None:
- print(f"== MSAN_OPTIONS={m_opts}")
- ub_opts = os.environ.get("UBSAN_OPTIONS")
- if ubsan and ub_opts is not None:
- print(f"== UBSAN_OPTIONS={ub_opts}")
+ sanitizers = []
+ if asan:
+ sanitizers.append("address")
+ if msan:
+ sanitizers.append("memory")
+ if ubsan:
+ sanitizers.append("undefined behavior")
+ if not sanitizers:
+ return
+
+ print(f"== sanitizers: {', '.join(sanitizers)}")
+ for sanitizer, env_var in (
+ (asan, "ASAN_OPTIONS"),
+ (msan, "MSAN_OPTIONS"),
+ (ubsan, "UBSAN_OPTIONS"),
+ ):
+ options= os.environ.get(env_var)
+ if sanitizer and options is not None:
+ print(f"== {env_var}={options!r}")
def no_tests_run(self):
return not any((self.good, self.bad, self.skipped, self.interrupted,
diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py
index ad7d529..53af21d 100644
--- a/Lib/test/pythoninfo.py
+++ b/Lib/test/pythoninfo.py
@@ -308,6 +308,13 @@ def collect_os(info_add):
"_PYTHON_PROJECT_BASE",
"_PYTHON_SYSCONFIGDATA_NAME",
"__PYVENV_LAUNCHER__",
+
+ # Sanitizer options
+ "ASAN_OPTIONS",
+ "LSAN_OPTIONS",
+ "MSAN_OPTIONS",
+ "TSAN_OPTIONS",
+ "UBSAN_OPTIONS",
))
for name, value in os.environ.items():
uname = name.upper()
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 64c66d8e..8e8bf49 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -407,19 +407,19 @@ def check_sanitizer(*, address=False, memory=False, ub=False):
raise ValueError('At least one of address, memory, or ub must be True')
- _cflags = sysconfig.get_config_var('CFLAGS') or ''
- _config_args = sysconfig.get_config_var('CONFIG_ARGS') or ''
+ cflags = sysconfig.get_config_var('CFLAGS') or ''
+ config_args = sysconfig.get_config_var('CONFIG_ARGS') or ''
memory_sanitizer = (
- '-fsanitize=memory' in _cflags or
- '--with-memory-sanitizer' in _config_args
+ '-fsanitize=memory' in cflags or
+ '--with-memory-sanitizer' in config_args
)
address_sanitizer = (
- '-fsanitize=address' in _cflags or
- '--with-address-sanitizer' in _config_args
+ '-fsanitize=address' in cflags or
+ '--with-address-sanitizer' in config_args
)
ub_sanitizer = (
- '-fsanitize=undefined' in _cflags or
- '--with-undefined-behavior-sanitizer' in _config_args
+ '-fsanitize=undefined' in cflags or
+ '--with-undefined-behavior-sanitizer' in config_args
)
return (
(memory and memory_sanitizer) or