Oracle Solaris Studio 12.2:C++ 用户指南

警告

如果在不同的步骤中进行编译和链接,则编译命令和链接命令中都必须有 -fast 选项。

使用 -fast 选项编译的目标二进制文件不可移植。例如,在 UltraSPARCIII 系统中用以下命令生成的二进制文件在 UltraSPARCII 系统中无法执行。


example% CC -fast test.cc

不要将该选项用于依赖 IEEE 标准浮点运算的程序,否则可能会产生不同的数字结果、过早的程序终止或意外的 SIGFPE 信号。

在早期的 SPARC 发行版中,-fast 宏扩展到了 -fsimple=1。而现在扩展到 -fsimple=2

-fast 的扩展包括 -D_MATHERR_ERRNO_DONTCARE

使用 -fast,编译器可以用不设置 errno 变量的等效优化代码自由替换对浮点函数的调用。而且,-fast 还会定义宏 __MATHERR_ERRNO_DONTCARE,使编译器无需确保 errno 的有效性。因此,在浮点函数调用后依赖于 errno 值的用户代码可能生成不一致的结果。

解决此问题的一种方法是避免使用 -fast 编译此类代码。但是,如果需要 -fast 优化并且代码依赖于 浮点库调用后正确设置的 errno 值 应使用以下选项进行编译。

-xbuiltin=none -U__MATHERR_ERRNO_DONTCARE -xnolibmopt -xnolibmil

然后,在命令行上使用 -fast,以禁止编译器优化此类库调用,并确保正确处理 errno

要在任何平台上显示 —fast 的扩展,请运行命令 CC —dryrun —fast


>CC -dryrun -fast
###     command line files and options (expanded):
### -dryrun -xO5 -xarch=sparcvis2 -xcache=64/32/4:1024/64/4 \
-xchip=ultra3i -xmemalign=8s -fsimple=2 -fns=yes -ftrap=%none \
-xlibmil -xlibmopt -xbuiltin=%all -D__MATHERR_ERRNO_DONTCARE