[Lldb-commits] [lldb] [lldb] Fix the 'skipUnlessUndefinedBehaviorSanitizer' decorator. (PR #176463)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Fri Jan 16 18:30:09 PST 2026


JDevlieghere wrote:

> The issue is _compiler_supports is also using a `with` statement, so `__exit__` is called before the function returns. Using another `with` statement would still clean up the file unless we refcounted the number of `__enter__` and `__exit__` calls to only remove the file once they're balanced.

Ack, I missed that we're passing the file to `_compiler_supports`, but I think the way that works currently is kind of bogus. If we pass in an output file, `_compiler_supports` shouldn't muck with it, and trust that the caller is in charge. 

What about:

```
from contextlib import nullcontext

def _compiler_supports(compiler, flag, source="int main() {}", output_file=None):
    """Test whether the compiler supports the given flag."""
    with with temp_file.OnDiskTempFile() if not output_file else nullcontext() as ctx:
        if platform.system() == "Darwin":
            compiler = "xcrun " + compiler
        try:
            cmd = "echo '%s' | %s %s -x c -o %s -" % (
                source,
                compiler,
                flag,
                output_file.path if output_file else ctx.path,
            )
            subprocess.check_call(cmd, shell=True)
        except subprocess.CalledProcessError:
            return False
        return True

```



https://github.com/llvm/llvm-project/pull/176463


More information about the lldb-commits mailing list