xlC 警告,"The NOSTRICT option has the potential to alter the semantics of a program"



我正在在GCC编译农场和GCC119上进行测试。GCC119是带有XLC 13.1编译器的AIX机器。我对平台和编译器一无所知。

当我在XLC下构建时:

$ CXX=xlC gmake CXXFLAGS="-DNDEBUG -g2 -O3 -qrtti" -j 8
xlC -DNDEBUG -g2 -O3 -qrtti -c cryptlib.cpp
xlC -DNDEBUG -g2 -O3 -qrtti -c cpu.cpp
...
xlC -DNDEBUG -g2 -O3 -qrtti -c hmac.cpp
1500-036: (I) The NOSTRICT option (default at OPT(3)) has the potential to alter the 
semantics of a program.  Please refer to documentation on the STRICT/NOSTRICT option
for more information.
...

编译器的IBM手册位于编译器参考v13.1。它没有提及STRICTNOSTRICT。最接近的基于关键字搜索的是-qkeyword=restrict生效时__C99_RESTRICT的讨论。此外,没有人页:

$ man NOSTRICT
Manual entry for NOSTRICT not found or not installed.
$ man 3 NOSTRICT
There is not an entry for NOSTRICT in section 3.
$ man STRICT
Manual entry for STRICT not found or not installed.
$ man 3 STRICT
There is not an entry for STRICT in section 3.
$ man OPT
Manual entry for OPT not found or not installed.
$ man 3 OPT
There is not an entry for OPT in section 3.

当我使用-qflag=w编译时,警告消失了,因此我有更少的信息可以使用。(图书馆和程序用-qflag=w干净地编译)。

我有两个问题。首先,XLC到底在抱怨什么?其次,是否有一个选项让XLC告诉我它抱怨的源文件和行号?

如果您查找有关-qstrict和-qnostrict选项的信息,则应以html格式或第349页找到它(如果您要按页码为页码)或Page 367(如果您使用的是PDF页面晋升者)以PDF格式。

,由于您正在使用-O3(OPT(3)),如消息所说,默认情况下,-Qnostrict选项有效,这意味着与您使用-Qstrict汇编相比,进行更具侵略性的优化为创建一个更快的可执行文件,以略有语义差异的费用。查看文档(以下复制),以了解这意味着什么;如果下面提到的任何差异对您很重要,则使用-o3 -qstrict编译以防止这些语义差异发生,但是您的应用程序性能可能不太好。

效果为-qnostrict,已打开以下优化:

  • 可能导致例外的代码可能会重新排列。相应的异常可能发生在执行的不同点,也可能根本不会发生。(编译器仍试图最大程度地减少这种情况。)
  • 浮点操作可能无法保留零值的符号。(要确保保留此标志,您还需要指定-QFLOAT = rrm,-qfloat = nomaf或-qfloat = strictnmaf。)
  • 浮点表达式可以重新关联。例如,(2.0*3.1) 4.2如果结果更快,即使结果可能并不相同,也可能变为2.0 (3.1*4.2)。
  • -QFLOAT选项的Fltint和RSQRT子选择已打开。您可以通过还使用-Qstrict选项或-QFLOAT的NOFLTINT和NORQRT子选择再次将它们关闭。通过指定较低级别或未优化,默认情况下关闭了这些子选择。

您的男人命令不会像NOSTRICTSTRICTOPT那样写作,是编译器选项,不能与人一起使用。为了查看编译器人页,您需要使用man xlC

没有与此信息消息关联的源文件和行号信息,因为它是与-O3编译的所有文件中的一般消息。

如果您想对文档提供反馈(包括人页,在线文档等),IBM正在寻找反馈。

P.S。可以以HTML格式或PDF格式找到IBM XL C/C 的完整文档。有几个"书籍"构成了完整的编译器文档,包括编译器参考。

相关内容

最新更新