0

我正在 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 告诉我它抱怨的源文件和行号?

4

1 回答 1

3

如果您查找有关 -qstrict 和 -qnostrict 选项的信息,您应该在此处以HTML 格式或在第 349 页(如果您按页码)或第 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 和 norsqrt 子选项再次关闭它们。指定较低级别或未指定优化时,这些子选项默认关闭。

您的 man 命令不能像 , 和 那样编写NOSTRICTSTRICT并且OPT是编译器选项,不能与 man 一起使用。为了查看编译器手册页,您需要使用man xlC.

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

如果您想就文档(包括手册页、在线文档等)提供反馈,IBM 正在寻找反馈

PS 可以在HTML 格式PDF 格式中找到 IBM XL C/C++ for AIX V13.1 的完整文档。有几本“书籍”构成了完整的编译器文档,包括编译器参考。

于 2017-09-01T14:16:36.833 回答