# 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.

# This file is used to suppress warnings based on the file they originate from,
# as opposed to disabling warnings via -Wno flags which apply to all the files
# involved in each compilation. For more information, see
# https://clang.llvm.org/docs/WarningSuppressionMappings.html
# For background information on their use in chromium, see crbug.com/404297941

# Warning Suppression Policy: updates to this file should be tightly controlled,
# for reasons discussed in crbug.com/404297941. In particular:
#
# 1. This file should never grow (as measured by the number of files suppressed)
#    except when a new warning is enabled.
# 2. This file should only be used to opt out whole directories, never
#    individual files.
# 3. This file should be used as a last resort; if it's possible to fix the warning or suppress
#    it without using the file, do so.
#    1. For first-party code, just fix it directly, or use `#pragma GCC diagnostic ignored`.
#    2. For third-party code, first attempt to fix it upstream.
#    3. If that's not possible, attempt to suppress the warning using `-Wno` flags in a gn file.
# 4. All entries should have a path to eventually be removed.
#
# In practice, rules (3) and (4) mean that the only accepted use case for this file is to
# speed up rolls or enable a warning slightly sooner, for cases where an upstream fix has been
# proposed but is likely to take a long time to get merged and rolled into chromium.
#
# We may make an exception to the policy for extremely high-value warnings that backslide a lot
# (such as unsafe buffers), but this is expected to be rare.

# Formatting Notes:
# 1. Don't put comments on the same line as a glob pattern! Clang will get confused,
#    and the warning won't be suppressed.
# 2. The syntax {/,\\} matches either a backslash or forward slash. They can sometimes
#    be intermixed in a single path when compiling on Windows.

[unnecessary-virtual-specifier]
# Can be removed when https://github.com/google/nearby/pull/3392 is merged and rolled
src:*{/,\\}third_party{/,\\}nearby{/,\\}*

[unique-object-duplication]
# This warning is extremely difficult to fix in code we don't directly control.
# As an experiment, we're breaking the policy and suppressing it permanently.
src:*{/,\\}third_party{/,\\}*
# v8's build system isn't amenable to fixes: https://crbug.com/408259026
src:*{/,\\}v8{/,\\}*

[exit-time-destructors]
src:*{/,\\}third_party{/,\\}angle{/,\\}*
src:*{/,\\}third_party{/,\\}crashpad{/,\\}crashpad{/,\\}third_party{/,\\}cpp-httplib{/,\\}*
src:*{/,\\}third_party{/,\\}crc32c{/,\\}src{/,\\}src{/,\\}*
src:*{/,\\}third_party{/,\\}dawn{/,\\}*
src:*{/,\\}third_party{/,\\}fuzztest{/,\\}src{/,\\}*
src:*{/,\\}third_party{/,\\}gemmlowp{/,\\}*
src:*{/,\\}third_party{/,\\}googletest{/,\\}src{/,\\}googlemock{/,\\}src{/,\\}*
src:*{/,\\}third_party{/,\\}grpc{/,\\}source{/,\\}src{/,\\}*
src:*{/,\\}third_party{/,\\}libprotobuf-mutator{/,\\}src{/,\\}src{/,\\}libfuzzer{/,\\}*
src:*{/,\\}third_party{/,\\}openscreen{/,\\}src{/,\\}*
src:*{/,\\}third_party{/,\\}openxr{/,\\}src{/,\\}src{/,\\}*
src:*{/,\\}third_party{/,\\}skia{/,\\}tools{/,\\}*
src:*{/,\\}third_party{/,\\}spirv-tools{/,\\}*
src:*{/,\\}third_party{/,\\}swiftshader{/,\\}*
src:*{/,\\}third_party{/,\\}tflite{/,\\}src{/,\\}third_party{/,\\}xla{/,\\}*
src:*{/,\\}third_party{/,\\}vulkan-utility-libraries{/,\\}*
src:*{/,\\}third_party{/,\\}webrtc{/,\\}*
src:*{/,\\}third_party{/,\\}webrtc_overrides{/,\\}test{/,\\}*
# TODO(crbug.com/439492886): This suppression must be fixed internally.
src:*{/,\\}chrome{/,\\}browser{/,\\}platform_experience{/,\\}*
