使用gcc 7.3时出现此错误。 gcc 7.3来自Ubuntu 18.04和在RedHat 6.9上编译的gcc 7.3。但是它从Anaconda2的gcc 4.8.5中消失了。
我了解没有源代码,人们将很难提供帮助。但我无权发布所有帖子。我将不胜感激任何建议,这些建议可以帮助我确定为什么gcc 7.3和4.8.5之间的行为不同。
该程序由Scons构建,我不熟悉。我很乐意提供更多信息,但我不知道如何。
错误是:
[ TRACING] -> X86/debug/DiskImageWrite.hh
[SO PARAM] CowDiskImage -> X86/params/CowDiskImage.hh
[SO PARAM] DiskImage -> X86/params/DiskImage.hh
[SO PARAM] RawDiskImage -> X86/params/RawDiskImage.hh
[ CXX] X86/dev/disk_image.cc -> .o
build/X86/dev/copy_engine.cc: In member function 'void CopyEngine::CopyEngineChannel::channelRead(Packet*, Addr, int)':
build/X86/dev/copy_engine.cc:249:43: error: '~' on an expression of type bool [-Werror=bool-operation]
pkt->set<uint64_t>(cr.status() | ~busy);
^~~~
build/X86/dev/copy_engine.cc:249:43: note: did you mean to use logical not ('!')?
通过“〜”可以看出它不是C语法,很可能是Python代码。但是为什么它对Anaconda gcc有用呢?
答案 0 :(得分:1)
~
是C和C ++中的bitwise negation operator。
在其中引发诊断的源文件X86/dev/disk_image.cc
是这样编译的C ++源文件([ CXX]
)。
~
不是布尔运算。将~
应用于bool
表达式(很明显在~busy
中发生)可能是
程序员方面的错误,这实际上可能对程序有害,也可能不会。正如gcc 7.3所暗示的那样,它们可能是逻辑上的
否定!busy
。
gcc 7.3
为 -Wall
时,通过警告来诊断此可能的错误。
实际上,并添加了选项-Werror
(=将警告视为错误),
诊断变为错误。 See here
年龄较大的gcc 4.8.5
不能诊断出此可能的错误(使用相同的诊断选项,
或任何其他)。 See here
这就是您正在观察的差异。