-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcppcheck.supp
More file actions
26 lines (25 loc) · 1.88 KB
/
Copy pathcppcheck.supp
File metadata and controls
26 lines (25 loc) · 1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# cppcheck.supp —— 已知的**工具**误报(不是代码问题的豁免清单)。
# 规矩:往这里加一条,必须附上**最小复现**与"为什么不是我们代码的问题"。做不到就别加 ——
# 一份没有复现的豁免清单,就是把静态检查关掉。
# ⚠️ 本文件的格式坑(实测撞到过):**不许出现"只有 # 的空注释行"**(行尾带空格也不行)。
# cppcheck 2.13 的抑制文件解析器遇到那种行会直接报「Failed to add suppression. No id.」
# 并退出 —— 而它退出时的输出是**空的**,看起来跟"零发现"一模一样。
# 也就是说:写错一个空行,静态检查就变成了一个永远通过的空壳。所以本文件不留空注释行。
# ── 1. cppcheck 2.13.0 把 std::shared_ptr<T>::get() 当成 void* ──────────────
# 影响:src/kernel/frame.cpp 里的 6 处指针算术(clone / abs_difference 等)。
# 最小复现(三段代码,不含本工程任何东西):
# #include <memory>
# float sum(const std::shared_ptr<float>& p, int n) {
# float acc = 0.f;
# for (int i = 0; i < n; ++i) acc += *(p.get() + i);
# return acc;
# }
# → cppcheck --enable=portability --std=c++11 报:
# portability: 'p.get()' is of type 'void *'. Used in pointer arithmetic.
# 为什么确定是工具的问题:
# ① 上面那段只用标准库,cppcheck 照样报 —— 与 frame.cpp 的写法无关;
# ② 本工程按 -Wall -Wextra -Wpedantic -Werror 编译通过。真的对 void* 做算术,
# -Wpedantic 会直接报 "pointer of type 'void *' used in arithmetic",-Werror 会让它失败。
# 两条证据互相独立,任一条成立就足以说明这里的类型是 float*。
# 何时该删掉这条:cppcheck 修好之后(拿上面那段复现回归,不再报即可)。
arithOperationsOnVoidPointer