Add warning suppression mapping file to the build
This adds an (empty) warning suppression mapping file, per the linked bug. It controls its use by adding a new gn arg pointing to the file, and passing the WSM to each clang compilation if the arg is set. Since the arg is set in our `.gn` file, consumers of our `build/` directory will see no change, but can choose to use their own WSM file if they wish. It also contains some hacks/configs to make sure the file gets uploaded by reclient/siso. So far, the file is unused, but we'll start filling it out as we make progress enabling warnings. Change-Id: I0493109c1c365643b97de937286ca7d0a4f89729 Bug: 404297941 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6344734 Reviewed-by: Hans Wennborg <hans@chromium.org> Commit-Queue: Devon Loehr <dloehr@google.com> Cr-Commit-Position: refs/heads/main@{#1438081}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
8e6856106c
commit
b9f7ffacaa
.gn
build/config
1
.gn
1
.gn
@@ -74,6 +74,7 @@ default_args = {
|
|||||||
devtools_visibility = [ "*" ]
|
devtools_visibility = [ "*" ]
|
||||||
|
|
||||||
clang_unsafe_buffers_paths = "//build/config/unsafe_buffers_paths.txt"
|
clang_unsafe_buffers_paths = "//build/config/unsafe_buffers_paths.txt"
|
||||||
|
clang_warning_suppression_file = "//build/config/warning_suppression.txt"
|
||||||
}
|
}
|
||||||
|
|
||||||
# These are the targets to skip header checking by default. The files in targets
|
# These are the targets to skip header checking by default. The files in targets
|
||||||
|
@@ -184,6 +184,7 @@ declare_args() {
|
|||||||
# Unsafe buffers. Location of file used by plugins to track portions of
|
# Unsafe buffers. Location of file used by plugins to track portions of
|
||||||
# the codebase which have been made manifestly safe.
|
# the codebase which have been made manifestly safe.
|
||||||
clang_unsafe_buffers_paths = ""
|
clang_unsafe_buffers_paths = ""
|
||||||
|
clang_warning_suppression_file = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
|
@@ -5,3 +5,8 @@ per-file cast.gni=file://build/config/chromecast/OWNERS
|
|||||||
|
|
||||||
per-file unsafe_buffers_paths.txt=arthursonzogni@chromium.org
|
per-file unsafe_buffers_paths.txt=arthursonzogni@chromium.org
|
||||||
per-file unsafe_buffers_paths.txt=tsepez@chromium.org
|
per-file unsafe_buffers_paths.txt=tsepez@chromium.org
|
||||||
|
|
||||||
|
per-file warning_suppression.txt=dloehr@google.com
|
||||||
|
per-file warning_suppression.txt=thakis@chromium.org
|
||||||
|
per-file warning_suppression.txt=hans@chromium.org
|
||||||
|
per-file warning_suppression.txt=tsepez@chromium.org
|
||||||
|
@@ -51,18 +51,26 @@ lld_emit_indexes_and_imports =
|
|||||||
lld_emit_indexes_and_imports && is_a_target_toolchain
|
lld_emit_indexes_and_imports && is_a_target_toolchain
|
||||||
|
|
||||||
# TODO(crbug.com/326584510): Reclient does not upload `inputs` from C/C++
|
# TODO(crbug.com/326584510): Reclient does not upload `inputs` from C/C++
|
||||||
# targets. This file is added to `inputs` for all C targets in
|
# targets. We work around the bug in Reclient by
|
||||||
# //build/config/BUILDCONFIG.gn via //build/config/clang:unsafe_buffers.
|
# specifying the files here.
|
||||||
# We work around the bug in Reclient by specifying the file here.
|
rbe_bug_326584510_missing_input_list = []
|
||||||
#
|
|
||||||
# This is a comma-delimited list of paths relative to the source tree root. The
|
|
||||||
# leading space is important, if the string is non-empty. :)
|
|
||||||
rbe_bug_326584510_missing_inputs = ""
|
|
||||||
if (clang_use_chrome_plugins && defined(clang_unsafe_buffers_paths) &&
|
if (clang_use_chrome_plugins && defined(clang_unsafe_buffers_paths) &&
|
||||||
"$clang_unsafe_buffers_paths" != "") {
|
"$clang_unsafe_buffers_paths" != "") {
|
||||||
if (rbe_exec_root != rebase_path("//")) {
|
if (rbe_exec_root != rebase_path("//")) {
|
||||||
assert(!use_siso, "Can't use non-default rbe_exec_root with siso.")
|
assert(!use_siso, "Can't use non-default rbe_exec_root with siso.")
|
||||||
}
|
}
|
||||||
from_exec_root = rebase_path(clang_unsafe_buffers_paths, rbe_exec_root)
|
rbe_bug_326584510_missing_input_list +=
|
||||||
rbe_bug_326584510_missing_inputs = " -inputs=$from_exec_root"
|
[ rebase_path(clang_unsafe_buffers_paths, rbe_exec_root) ]
|
||||||
}
|
}
|
||||||
|
if (defined(clang_warning_suppression_file) &&
|
||||||
|
"$clang_warning_suppression_file" != "") {
|
||||||
|
if (rbe_exec_root != rebase_path("//")) {
|
||||||
|
assert(!use_siso, "Can't use non-default rbe_exec_root with siso.")
|
||||||
|
}
|
||||||
|
rbe_bug_326584510_missing_input_list +=
|
||||||
|
[ rebase_path(clang_warning_suppression_file, rbe_exec_root) ]
|
||||||
|
}
|
||||||
|
|
||||||
|
# The leading space is important, if the string is non-empty.
|
||||||
|
rbe_bug_326584510_missing_inputs =
|
||||||
|
" -inputs=" + string_join(",", rbe_bug_326584510_missing_input_list)
|
||||||
|
@@ -312,6 +312,7 @@ config("compiler") {
|
|||||||
":compiler_cpu_abi",
|
":compiler_cpu_abi",
|
||||||
":compiler_codegen",
|
":compiler_codegen",
|
||||||
":compiler_deterministic",
|
":compiler_deterministic",
|
||||||
|
":clang_warning_suppression",
|
||||||
]
|
]
|
||||||
|
|
||||||
# Here we enable -fno-delete-null-pointer-checks, which makes various nullptr
|
# Here we enable -fno-delete-null-pointer-checks, which makes various nullptr
|
||||||
@@ -1650,6 +1651,31 @@ config("clang_revision") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Controls the usage of a warning suppression mapping (WSM) file to suppress
|
||||||
|
# warnings based on the path of the file they come from. It's controlled by the
|
||||||
|
# `clang_warning_suppression_file` gn argument , which points to a text file
|
||||||
|
# defining which warnings should be suppressed where.
|
||||||
|
# See //build/config/warning_suppression.txt for an example file; this is the
|
||||||
|
# file used by Chromium.
|
||||||
|
#
|
||||||
|
# To use a different file, or to use this functionality outside of chromium,
|
||||||
|
# set the `clang_warning_suppression_file` argument to point to the new file,
|
||||||
|
# e.g. by setting in the the project's .gn file.
|
||||||
|
config("clang_warning_suppression") {
|
||||||
|
# Some build configs use older versions of clang that don't support WSMs
|
||||||
|
if (!is_nacl && default_toolchain != "//build/toolchain/cros:target" &&
|
||||||
|
!llvm_android_mainline && is_clang &&
|
||||||
|
clang_warning_suppression_file != "") {
|
||||||
|
from_build_root =
|
||||||
|
rebase_path(clang_warning_suppression_file, root_build_dir)
|
||||||
|
inputs = [ clang_warning_suppression_file ]
|
||||||
|
cflags = [
|
||||||
|
"-Xclang",
|
||||||
|
"--warning-suppression-mappings=" + from_build_root,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
config("rustc_revision") {
|
config("rustc_revision") {
|
||||||
if (rustc_revision != "") {
|
if (rustc_revision != "") {
|
||||||
# Similar to the above config, this is here so that all files get recompiled
|
# Similar to the above config, this is here so that all files get recompiled
|
||||||
|
@@ -87,15 +87,19 @@ __input_deps = {
|
|||||||
],
|
],
|
||||||
"third_party/llvm-build/Release+Asserts/bin/clang": [
|
"third_party/llvm-build/Release+Asserts/bin/clang": [
|
||||||
"build/config/unsafe_buffers_paths.txt",
|
"build/config/unsafe_buffers_paths.txt",
|
||||||
|
"build/config/warning_suppression.txt",
|
||||||
],
|
],
|
||||||
"third_party/llvm-build/Release+Asserts/bin/clang++": [
|
"third_party/llvm-build/Release+Asserts/bin/clang++": [
|
||||||
"build/config/unsafe_buffers_paths.txt",
|
"build/config/unsafe_buffers_paths.txt",
|
||||||
|
"build/config/warning_suppression.txt",
|
||||||
],
|
],
|
||||||
"third_party/llvm-build/Release+Asserts/bin/clang-cl": [
|
"third_party/llvm-build/Release+Asserts/bin/clang-cl": [
|
||||||
"build/config/unsafe_buffers_paths.txt",
|
"build/config/unsafe_buffers_paths.txt",
|
||||||
|
"build/config/warning_suppression.txt",
|
||||||
],
|
],
|
||||||
"third_party/llvm-build/Release+Asserts/bin/clang-cl.exe": [
|
"third_party/llvm-build/Release+Asserts/bin/clang-cl.exe": [
|
||||||
"build/config/unsafe_buffers_paths.txt",
|
"build/config/unsafe_buffers_paths.txt",
|
||||||
|
"build/config/warning_suppression.txt",
|
||||||
],
|
],
|
||||||
"third_party/llvm-build/Release+Asserts/bin/lld-link": [
|
"third_party/llvm-build/Release+Asserts/bin/lld-link": [
|
||||||
"build/config/c++/libc++.natvis",
|
"build/config/c++/libc++.natvis",
|
||||||
|
9
build/config/warning_suppression.txt
Normal file
9
build/config/warning_suppression.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Copyright 2025 The Chromium Project. All rights reserved.
|
||||||
|
# Use of this source code is governed by a BSD-style license that can be
|
||||||
|
# found in the LICENSE file.
|
||||||
|
|
||||||
|
# Warning suppression mappings are listed here on a per-warning basis.
|
||||||
|
# Upstream docs: https://clang.llvm.org/docs/WarningSuppressionMappings.html
|
||||||
|
# We'll put the policy here too when it's written.
|
||||||
|
# Don't use this file until the policy is written.
|
||||||
|
# See crbug.com/404297941 for more information.
|
Reference in New Issue
Block a user