以下部分介绍编译器中的更改,包括以下主题:
下面列出了自上一发行版起对 C、C++ 和 Fortran 编译器进行的更改。可在编译器手册页中找到详细信息。特定于 C++ 编译器的更改已在C++ 编译器中进行了详细介绍。特定于 C 编译器的更改已在C 编译器中进行了详细介绍。
每一个 Oracle Developer Studio 发行版都包括对 Oracle Sun 硬件服务器的性能改进。此发行版中包括对 SPARC M6、SPARC M7、SPARC T7、SPARC S7 和 Intel Broadwell/avx2_i 处理器的扩展支持。
以下列表介绍了影响 C、C++ 和 Fortran 编译器的其他更改:
支持 SPARC M6、M7、T7 和 S7 处理器。
支持 x86 数据空间分析。
–xcheck 有新的缺省 –xcheck=stkovfl。
新编译器选项:
–features=[no]mergestrings 可使编译器将字符串字母以及其他合适的 const 或只读数据放入链接程序从中删除重复字符串的二进制文件的特定部分。此选项仅在 SPARC 中可用。
–xsecure_code_analysis 启用编译器安全代码分析,以便在编译时查找和显示可能的内存安全违规。
–xtarget=S7, –xchip=S7 在编译器驱动程序中受支持。
Fortran 编译器通过针对 Fortran77、Fortran90 和 Fortran95 标准的创纪录运行时性能和兼容性选项来支持技术和科学应用程序开发。包括大多数 Fortran 2003 功能和 OpenMP 4.0 支持。Fortran 编译器与 C 和 C++ 编译器使用相同的高性能代码生成技术,从而确保结果应用程序为最新的基于 SPARC 和 x86 的 Oracle 系统生成最高性能的并行代码。
Fortran 编译器的更改包括编译器通用的新增和更改的功能中介绍的更改,以及以下更改:
自由源代码格式行的最大长度从 132 个字符增加到了 250 个字符。
有关更多信息,请参见 f95(1) 手册页和Oracle Developer Studio 12.5:Fortran 用户指南。
缺省情况下,对 C 和 C++ 编译器生成内存安全检查的编译时警告。
包括以下消息标记:
SEC_UNINITIALIZED_MEM_READ
SEC_UNINITIALIZED_BITOP
SEC_UNDEFINED_RETURN_VALUE
SEC_ARR_OUTSIDE_BOUND_READ
SEC_ARR_OUTSIDE_BOUND_WRITE
SEC_FREED_PTR_RETURN
SEC_READ_FREED_PTR
SEC_WRITE_FREED_PTR
SEC_NULL_PTR_DEREF
向 stderr 发出警告并发出所有其他编译时错误和警告。它们由 –erroff、–errtags 和 –errwarn 命令行选项以及 error_messages() pragma 控制,与所有其他编译时消息类似。
–errwarn 命令行选项可用于将内存安全检查警告变为致命错误。例如:
–errwarn=SEC_NULL_PTR_DEREF 使任何空指针解除引用变为致命错误。
–errwarn=%all 使所有编译时警告变为致命错误。
静态错误检查与编译器后端处理并行运行。在某些情况下,如负载沉重的系统或包含极复杂的流量控制的超大型模块,编译时间可能会增加。在编译时间绝对重要的情况下,可通过命令行选项 –xsecure_code_analysis=no 禁用静态错误检查,但这是以抑制可能严重的诊断消息为代价的。
另外,可以使用 Oracle Developer Studio 的缺省 config 文件功能禁用整个站点的静态错误检查。例如,可以使用配置文件 cc.defaults 或 CC.defaults。也可以使用 c89.defaults 或 c99.defaults。安装路径是 install-dir/lib/compilers/etc/config.。
可以使用 SPRO_DEFAULTS_PATH 环境变量禁用缺省的静态错误检查,无需对 makefile 进行更改:SPRO_DEFAULTS_PATH=path,其中 path 是包含缺省文件的目录。
可使用 error_messages() pragma 根据源文件的指定区域选择性地启用和禁用 SEC 消息。
以下示例说明如何在特定语句上禁用特定 SEC 警告:
cat foo.c: <some code> #pragma error_messages (off, tag-of-interest) <statement of interest> #pragam error_messages (default|on, tag-of-interest) <remainder of code>
其中 tag-of-interest 是 SEC 前端警告之一。
禁用代码区域中的所有 SEC 警告:
cat foo.c: <some code> #pragma error_messages (off, SEC_UNINITIALIZED_MEM_READ,SEC_UNINITIALIZED_BITOP,SEC_UNDEFINED_RETURN_VALUE, SEC_ARR_OUTSIDE_BOUND_READ,SEC_ARR_OUTSIDE_BOUND_WRITE,SEC_DOUBLE_FREE,SEC_FREED_PTR_RETURN, SEC_READ_FREED_PTR,SEC_WRITE_FREED_PTR,SEC_NULL_PTR_DEREF) line-or-lines-of-interest #pragam error_messages (default|on, SEC_UNINITIALIZED_MEM_READ,SEC_UNINITIALIZED_BITOP,SEC_UNDEFINED_RETURN_VALUE, SEC_ARR_OUTSIDE_BOUND_READ,SEC_ARR_OUTSIDE_BOUND_WRITE,SEC_DOUBLE_FREE,SEC_FREED_PTR_RETURN, SEC_READ_FREED_PTR,SEC_WRITE_FREED_PTR,SEC_NULL_PTR_DEREF) <remainder of code>