奇怪的编译错误

时间:2018-07-19 04:39:12

标签: gcc compiler-errors compilation anaconda

使用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有用呢?

1 个答案:

答案 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

这就是您正在观察的差异。