【发布时间】:2017-03-11 19:57:54
【问题描述】:
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 - 但似乎没有任何解决办法。如果有人指出可能会扰乱隐蔽性,那就太好了。
[Update#1]:我使用的是 ubuntu 16.04 (kernel - 4.4.0-38-generic),gcc/g++ 5.4.0,coverity 7.5.1
[Update#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。
【问题讨论】:
-
能否提供您的操作系统、编译器和版本?
-
我使用的是 ubuntu 16.04 (kernel - 4.4.0-38-generic),gcc/g++ 5.4.0,coverity 7.5.1