[clang-tidy] 静态分析器无法发现失败的 `REQUIRE` 没有通过,导致出现假阳性(例如 `bugprone-unchecked-optional-access`)
作者: BaLiKfromUA创建于 2026年7月8日更新于 2026年8月19日
标签Warnings issue
描述错误
考虑以下代码:
TEST_CASE("demo_with_optional_safe") {
std::optional<int> opt;
REQUIRE(opt);
CHECK(*opt == 42); // safe: false-positive
}
TEST_CASE("demo_with_optional_unsafe") {
std::optional<int> opt;
CHECK(opt);
CHECK(*opt == 42); // unsafe
}如果我们运行clang-tidy的bugprone-unchecked-optional-access检查,该检查会在没有先前检查可选值是否包含值的情况下警告,我们将得到2个警告:
<source>:28:10: warning: unchecked access to optional value [bugprone-unchecked-optional-access]
28 | CHECK(*opt == 42); // safe: false-positive
| ^
<source>:35:10: warning: unchecked access to optional value [bugprone-unchecked-optional-access]
35 | CHECK(*opt == 42); // unsafe
| ^
2 warnings generated.
Suppressed 2 warnings (2 NOLINT).预期行为
在"demo_with_optional_safe"中,对可选值的访问不应被标记,因为REQUIRE在失败时终止测试,从而保证在访问时opt.has_value()为真。
内容来源: catchorg/Catch2