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
pull/13115/head
Dylan Baker 7 months ago
parent 46b3c1c30d
commit 9e3b3db705
  1. 16
      mesonbuild/backend/ninjabackend.py

@ -1,6 +1,6 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
# Copyright 2012-2017 The Meson development team # Copyright 2012-2017 The Meson development team
# Copyright © 2023 Intel Corporation # Copyright © 2023-2024 Intel Corporation
from __future__ import annotations from __future__ import annotations
@ -2767,11 +2767,17 @@ https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47485'''))
else: else:
return compiler.get_compile_debugfile_args(objfile, pch=False) return compiler.get_compile_debugfile_args(objfile, pch=False)
def get_link_debugfile_name(self, linker, target) -> T.Optional[str]: def get_link_debugfile_name(self, linker: T.Union[Compiler, StaticLinker], target: build.BuildTarget) -> T.Optional[str]:
return linker.get_link_debugfile_name(self.get_target_debug_filename(target)) 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): def get_link_debugfile_args(self, linker: T.Union[Compiler, StaticLinker], target: build.BuildTarget) -> T.List[str]:
return linker.get_link_debugfile_args(self.get_target_debug_filename(target)) 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): def generate_llvm_ir_compile(self, target, src: mesonlib.FileOrString):
base_proxy = target.get_options() base_proxy = target.get_options()

Loading…
Cancel
Save