Coverity 在尝试计算结构中成员的偏移量时检测到未定义的标识符。
typedef struct A
{
uint8_t mem[10];
} A;
size_t offset = offsetof(A, mem); // This line raises the error.
确切的覆盖描述是“标识符 mem 未定义”。
我试过用 mem[0]、mem[] 替换 mem,从 struct A 中删除 typedef - 但似乎没有什么能解决它。如果有人指出可能会扰乱隐蔽性,那就太好了。
[更新#1]:我使用的是 ubuntu 16.04 (kernel - 4.4.0-38-generic),gcc/g++ 5.4.0,coverity 7.5.1
[更新#2]:具有这种结构和以下命令行选项的独立 test.c 可以保持覆盖率:
cov-build --dir . cc -c test.c -o test -Werror -march=corei7 -g -fstrict-aliasing -fstack-protector -fstrict-overflow -Wall -Wextra -Wshadow -Wmissing-prototypes -Wstrict-prototypes -O3 -fomit-frame-pointer -fPIE.
有趣的是,当我编译整个项目时,它会导致同一行出现一堆错误:UNDEFINED_IDENTIFIER、ROUTINE_NOT_EMITTED、TYPE_IDENTIFIER_NOT_ALLOWED。