From 9e3b3db7054c7dedecd14db3e6061ff7e2227faf Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Thu, 18 Apr 2024 11:40:50 -0700 Subject: backend/ninja: Fix cases where None is passed when unexpected When getting debug file arguments we can sometimes pass None, where a None is unexpected. This becomes a particular problem in the Cuda compiler, where the output will unconditionally be concatenated with a static string, resulting in an uncaught exception. This is really easy to spot once we annotate the functions in question, where a static type checker like mypy easily spots the issue. This commit adds those annotations, and then fixes the resulting error. Fixes: #12997 --- mesonbuild/backend/ninjabackend.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/mesonbuild/backend/ninjabackend.py b/mesonbuild/backend/ninjabackend.py index acd401e2f..bb03f0199 100644 --- a/mesonbuild/backend/ninjabackend.py +++ b/mesonbuild/backend/ninjabackend.py @@ -1,6 +1,6 @@ # SPDX-License-Identifier: Apache-2.0 # Copyright 2012-2017 The Meson development team -# Copyright © 2023 Intel Corporation +# Copyright © 2023-2024 Intel Corporation from __future__ import annotations @@ -2767,11 +2767,17 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485''')) else: return compiler.get_compile_debugfile_args(objfile, pch=False) - def get_link_debugfile_name(self, linker, target) -> T.Optional[str]: - return linker.get_link_debugfile_name(self.get_target_debug_filename(target)) + def get_link_debugfile_name(self, linker: T.Union[Compiler, StaticLinker], target: build.BuildTarget) -> T.Optional[str]: + filename = self.get_target_debug_filename(target) + if filename: + return linker.get_link_debugfile_name(filename) + return None - def get_link_debugfile_args(self, linker, target): - return linker.get_link_debugfile_args(self.get_target_debug_filename(target)) + def get_link_debugfile_args(self, linker: T.Union[Compiler, StaticLinker], target: build.BuildTarget) -> T.List[str]: + filename = self.get_target_debug_filename(target) + if filename: + return linker.get_link_debugfile_args(filename) + return [] def generate_llvm_ir_compile(self, target, src: mesonlib.FileOrString): base_proxy = target.get_options() -- cgit v1.2.3