CANN稀疏算子编码规则
MR 安全编码规则 - 一般/建议级代码检视深度审查【免费下载链接】ops-sparse本项目是CANN提供的高性能稀疏矩阵计算的算子库专注于优化稀疏矩阵的计算效率。项目地址: https://gitcode.com/cann/ops-sparse本文件汇总所有**一般级Normal和建议级Advisory**规则。reviewer 检视时作为参考。1. 表达式规则 (G.EXP)G.EXP.26 [一般] 整型表达式先转型再运算整型表达式比较或赋值为更大类型前必须用该更大类型求值。错误int a 1000000, b 1000000; long long product a * b; // ← a*b 溢出后才转 long正确long long product (long long)a * b; // 先转型再运算2. 控制流规则 (G.CTL)G.CTL.03 [建议] 循环必须安全退出禁止死循环循环变量必须可控。错误while (true) { // 忘记 break 条件 → 死循环 }正确while (condition) { if (break_condition) break; update_condition(); }3. 断言规则 (G.AST)G.AST.03 [一般] 禁止用断言检测运行时可能发生的错误运行时错误使用错误处理代码返回值校验/异常而非assert。错误assert(file_handle ! nullptr); // ← file_handle 可能为空运行时错误正确if (file_handle nullptr) { OP_LOGE(ReadFile, file_handle is null); return ACL_SPARSE_STATUS_INVALID_VALUE; }4. 安全函数规则 (G.FUU)G.FUU.11 [一般] 必须检查安全函数返回值所有安全函数的返回值必须校验并正确处理。G.FUU.14 [一般] 不能用宏重命名安全函数保持安全函数原名不要通过 macro 改名。错误#define my_memcpy memcpy_s5. 数组规则 (G.ARR)G.ARR.03 [一般] 禁止 sizeof(ptr) 求数组大小sizeof(ptr)返回指针大小8 字节而非数组大小。错误void process(int* arr) { size_t n sizeof(arr) / sizeof(arr[0]); // ← 错误arr 是指针 // ... }正确void process(int* arr, size_t n) { // 显式传递大小 // ... }6. 库规则 (G.STD)G.STD.18 [一般] 多线程场景注意竞争条件调用库函数时使用线程安全版本。7. 其他安全规则 (G.OTH)G.OTH.03 [一般] 禁用 rand 做安全用途安全场景使用密码学安全随机数如/dev/urandom而非rand()/srand()。8. 代码质量规则 (CQ)CQ.04 [一般] 超大源文件拆分源文件总行数有上限要求建议 ≤ 1500 行超大应拆分模块。CQ.05 [一般] 超大头文件精简头文件应精简避免膨胀建议 ≤ 500 行。CQ.06 [一般] 目录文件数合理目录下文件数有上限要求建议 ≤ 50 个过多应分层组织。CQ.07 [一般] 禁止重复代码块相同逻辑应提取为公共函数禁止复制粘贴。CQ.08 [一般] 禁止重复文件发现内容相同的文件应合并。CQ.09 [一般] 禁止未使用的代码包括未使用的#include/ 变量 / 函数 / 死代码等。CQ.10 [一般] 禁止不安全函数使用安全函数版本替代不安全函数详见 mr-rules-essential.md 的 G.FUU.15。CQ.11 [一般] 告警应修复而非抑制禁止无理由抑制编译告警如#pragma GCC diagnostic ignored告警应修复。Reviewer 检视深度自查清单一般级检查G.EXP.26 整型表达式先转型G.AST.03 断言不检测运行时错误G.FUU.11 检查安全函数返回值G.FUU.14 不重命名安全函数G.ARR.03 sizeof(ptr) 不用求数组G.STD.18 多线程竞争条件G.OTH.03 不用 rand 做安全用途代码质量CQ检查CQ.04 / CQ.05 源文件/头文件大小在合理范围CQ.06 目录文件数合理CQ.07 无重复代码块CQ.08 无重复文件CQ.09 无未使用的代码CQ.10 全部使用安全函数CQ.11 无无理由压制告警建议级检查G.CTL.03 所有循环有安全退出条件【免费下载链接】ops-sparse本项目是CANN提供的高性能稀疏矩阵计算的算子库专注于优化稀疏矩阵的计算效率。项目地址: https://gitcode.com/cann/ops-sparse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考