xlC警告," NOSTRICT选项有可能改变程序的语义"

时间:2017-09-01 07:14:11

标签: c++ aix xlc

我正在GCC Compile Farm和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编译器手册位于Compiler Reference v13.1。它没有提到STRICTNOSTRICT。基于关键字搜索的最接近的是当__C99_RESTRICT生效时对-qkeyword=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告诉我它抱怨的源文件和行号?

1 个答案:

答案 0 :(得分:3)

如果您查找有关-qstrict和-qnostrict选项的信息,请在HTML format或第349页(如果您按页码进行)或第367页(如果你在PDF format中使用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和norsqrt子选项再次关闭它们。如果指定了较低级别或未进行优化,则默认情况下会关闭这些子选项。

您的man命令将无法像NOSTRICTSTRICT一样工作,OPT是编译器选项,不能与man一起使用。要查看编​​译器手册页,您需要使用man xlC

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

如果您想对文档(包括手册页,在线文档等)提供反馈,请IBM is looking for feedback

P.S。可以在HTML formatPDF format中找到IBM XL C / C ++ for AIX,V13.1的完整文档。有几本书"它构成了完整的编译器文档,包括编译器参考。