Intel® C++ Compiler 10.1 for Mac OS* X
Release Notes

Contents

Overview

This product provides tools for Mac OS* X software developers to create C and C++ applications that run at top speeds on Intel®-based Mac* systems running Mac OS* X. Intel® Compilers support multi-threaded code development through auto-parallelism and OpenMP* support.

Product Contents

This product is available in two editions.

The Standard Edition contains the following components:

The Professional Edition includes all of the Standard Edition and adds:

These additional components of the Professional Edition are installed separately and have their own Release Notes.

Note: The installation path for the Intel® C++ Compiler is /opt/intel/cc/10.1.xxx (32-bit) or /opt/intel/cce/10.1.xxx (64-bit), where xxx represents a 3-digit update number. The term <install-dir> is used in throughout this document to refer to the default installation path.

To receive technical support and product updates for the tools provided in this product you need to register. For how to register, please see Technical Support section below.

What's New in Versions 10.0 and 10.1

The following section discusses new features and changes in the Intel C++ Compiler since version 10.0. Please see the separate release notes for the Intel Debugger.

New and Changed Command Line Options

The following is a listing of command line options that are new or have changed since the version 9.1 release. Please refer to the compiler documentation for more information on these options.

-alias-const[-]
Determines whether the input/output buffer rule is applied to functions with pointer-type arguments. (Default: off)
-[no-]check-uninit
Determines whether run-time checking occurs for uninitialized variables. (Default: off)
-cxxlib-nostd
Prevents the compiler from linking with the standard C++ library. (Default: off)
-diag-<type> <diag-list>
Controls the display of diagnostic information (Default: off)
-diag-dump
Tells the compiler to print all enabled diagnostic messages and stop compilation (Default: off)
-diag-enable port-win
Enables warnings for GNU extensions that may cause errors when porting to Windows. (Default: off)
-diag-enable sv[1|2|3]
Enables the Static Verifier. (Default: off)
-diag-enable sv-include
Specifies that include files should also be considered by the Static Verifier
-diag-file[=file]
Causes the results of diagnostic analysis to be output to a file. (Default: off)
-diag-file-append[=file]
Causes the results of diagnostic analysis to be appended to a file. (Default: off)
-[no-]diag-id-numbers
Tells the compiler to display diagnostic messages by using their ID number values (Default: on)
-dumpmachine
Displays the target machine and operating system configuration and does not compile. (Default: off)
-f[no-]align-functions[=n]
Tells the compiler to align functions on an optimal byte boundary. (Default: off)
-fast
Enables a set of options for improved performance. The options have changed in this release. Please see the note below.
-fargument-noalias-global
Specifies that arguments do not alias each other and do not alias global storage. (Default: off)
-f[no-]exceptions
Enables exception handling table generation (Default: on for C++, off for C)
-f[no-]instrument-functions
Determines whether function entry and exit points are instrumented (Default: off)
-f[no-]jump-tables
Determines whether jump tables are generated for switch statements. (Default: off)
-f[no]-keep-static-consts
Tells the compiler to preserve allocation of variables that are not referenced in the source (Default: off)
-fmudflap
Tells the compiler to instrument risky pointer operations to prevent buffer overflows and invalid heap use (Default: off)
-fp-speculation=<mode>
Tells the compiler the mode in which to speculate on floating-point operations (Default: fast)
-gcc-sys
Defines GNU macros only during compilation of system headers. (Default: off)
-help [category]
Displays all available compiler options or a category of compiler options (Default: off)
-[no-]inline-calloc
Tells the compiler to inline calls to calloc() as calls to malloc() and memset(). (Default: off)
-ipo-jobs<n>
Specifies the number of commands (jobs) to be executed simultaneously during the link phase of Interprocedural Optimization (IPO)
-m32
Tells the compiler to generate code for 32-bit systems. (Default: off)
-m64
Tells the compiler to generate code for 64-bit systems. (Default: off)
-msse3
Tells the compiler to generate code for Intel® processors that support the SSE3 instructions (Default: off for 32-bit, on for 64-bit)
-nostdinc++
Prevents the compiler from searching for header files in the standard directories for C++; causes it to search the other standard directories. (Default: off)
-[no-]opt-class-analysis
Tells the compiler to use C++ class hierarchy information to analyze and resolve C++ virtual function calls at compile time (Default off)
-opt-malloc-options=n
Lets you specify an alternate algorithm for malloc(). (Default: 0)
-[no-]opt-multi-version-aggressive
Tells the compiler to use aggressive multi-versioning to check for pointer aliasing and scalar replacement. (Default: off)
-opt-ra-region-strategy [=keyword]
Selects the method that the register allocator uses to partition each routine into regions. (Default: default)
-opt-streaming-stores keyword
Enables generation of streaming stores for optimization. (Default: auto)
-[no-]par-runtime-control
Generates code to perform run-time checks for loops that have symbolic loop bounds. (Default: off)
-par-schedule-<keyword>[[]n]
Specifies a scheduling algorithm for DO loop iterations
-save-temps[-]
Tells the compiler to save intermediate files created during compilation (Default: off)
-shared-intel
Causes Intel-provided libraries to be linked in dynamically (Default: all libraries linked statically except libguide)
-static-intel
Causes Intel-provided libraries to be linked in statically (Default: all libraries linked statically except libguide)
-tcheck [<mode>]
Indicates the method of analysis to be performed for OpenMP threaded applications (Default: off)
-trigraphs
Supports ISO C trigraphs; also enabled in ANSI and C99 modes. (Default: off)
-[no-]unroll-aggressive
Tells the compiler to use aggressive, complete unrolling for loops with small constant trip counts. (Default: off)
-[no-]vec-guard-write
Tells the compiler to perform a conditional check in a vectorized loop. (Default: off)
-Weffc++
Enables warnings based on certain C++ programming guidelines. (Default: off)
-W[no-]missing-declarations
Enables warnings for global functions and variables without prior declaration. (Default: off)
-Wnon-virtual-dtor
Issue a warning when a class appears to be polymorphic, yet it declares a non-virtual one. (Default: off)
-Wreorder
Issue a warning when the order of member initializers does not match the order in which they must be executed. (Default: off)
-W[no-]strict-prototypes
Enables warnings for functions declared or defined without specified argument types. (Default: off)
-Wunused-variable
Enables warnings for functions declared or defined without specified argument types. (Default: off)
-Wwrite-strings
Issues a diagnostic message if const char * is converted to (non-const) char *. (Default: off)

Deprecated and Removed Command Line Options

For information on command line options that are either deprecated (still functional but to be removed in a future version) or removed (no longer supported), please refer to the section Compiler Options > Deprecated and Removed Compiler Options in the on-disk documentation.

Meaning of -fast Changed

The -fast option is a shorter way of specifying a set of options that generally improve run-time performance. As documented, the set of options may change over time. In version 10.0, -fast sets -xT, whereas in earlier versions it set -xP. If this change is not appropriate for you, you must specify the individual options you want instead of using -fast. Please see the Compiler Options section of the on-disk documentation for further information.

Alternate Command Line Options

Many command line options have an older spelling where underscores (“_”) instead of hyphens (“-“) connect the words in the option name. The older spelling is still a valid alternate option name.

Support for 64-bit Intel-based Mac* Systems

This version includes two compilers, one that generates code for Mac* systems based on Intel® 64 architecture processors, and one that generates code for Mac* systems based on IA-32 architecture processors.

New Optimized Exception Handling Implementation

This version features a complete new design of exception handling with simpler internal presentation to provide more opportunities for optimization. Improvements include:

"Mudflap" Pointer Use Checking

"Mudflap" is a pointer user checking technology based on compile-time instrumentation.  It adds protective code to a variety of potentially unsafe C/C++ constructs that detect actual erroneous uses at run time.  The class of errors detected includes:

C++ Class Hierarchy Analysis

C++ Class Hierarchy Analysis uses C++ class hierarchy information to provide information to the compiler so that it can resolve more virtual function targets at compile time thus improving performance.

New Manual CPU Dispatch cpuid Code

The cpu_dispatch and cpu_specific keywords now accept the cpuid code core_2_duo_ssse3 for Intel® Core™2 processors and Intel® Xeon® processors with Supplemental Streaming SIMD Extensions 3 (SSSE3).

Improved Parallelizer and Vectorizer

This version features a complete redesign of the optimizer that integrates parallelization and vectorization at O2 and O3 optimization levels with memory and loop optimizations.

Performance can be substantially improved by:

New and Enhanced Optimization Reports for Advanced Loop Transformations

Loop Transformation (HLO) Optimization reports tell you why the compiler was unable to apply loop interchange transformations on a set of loops and suggests loop interchange if the reported bottlenecks can be removed by source changes. These reports have been enhanced to provide more detailed information and to be easier to understand.

Behavior Change for new Expression with Parenthesized Type

In a new expression, a parenthesized type followed immediately by an array index is not valid C++. For example:

int main()
{
  char *p1 = new (char *)[20]; // array index is not allowed after ")"
  return 0;
}

In previous versions, the Intel C++ compiler would accept this code and either interpret it as if the array index was part of the type being created:

new ((char*)[20])

or not:

(new (char *))[20]

depending upon the reference compiler and compatibility version target. The compiler has now been changed to always give an error for this incorrect usage.

Behavior Change for -std=c99 and -std=c89

When the -std=c99 or -std=c89 options are used, the 10.1 compiler's behavior is now compatible with gcc and the __STRICT_ANSI__ macro is predefined. If your application compiles with errors and you wish to use the previous version's behavior, add -U__STRICT_ANSI__ to the command line.

Static Verifier

Static Verifier is a new compiler feature which performs static analysis of a program across multiple source files. It can detect different kinds of defects and doubtful or inconsistent uses of language features in user code and report them according to their severity level. Static Verifier understands C/C++ and Fortran code and can also perform analysis of OpenMP directives.
 
In this release, when Static Verifier is enabled the linker is not invoked so an executable or static/dynamic link library is not produced, object files that were produced as a result of invocation of Static Verifier are not valid and should not be used for generating of real executable or static/dynamic link libraries. The current usage model is that Static Verifier is added as an alternate build option to produce a diagnostic report.

For more information, please refer to the section on Building Applications > Error Handling > Handling Compile Time Errors > using Static Verification Diagnostic Options in the on-disk documentation.

Using Static Verifier in the Xcode* IDE

When Static Verifier support is enabled within the IDE, the customary final build target (e.g. an executable image) is not created. As such, we recommend that a separate "Static Verification" configuration be created, by cloning the existing Debug (development) configuration, for use when static verification is desired.

-ansi no longer implies -fp-port

In previous versions of the compiler, the -ansi switch implied -fp-port. In version 10.1, -ansi no longer implies -fp-port. As a result, the compiler generates more efficient floating-point code under -ansi, especially when using x87 instructions to implement FP calculations. Use -fp-port in addition to -ansi if it is important to round FP data to source precision at assignments and casts.

Extraneous Underscore Removed from asm Function Names

In version 9.1, the compiler inserted an underscore at the beginning of function names created through asm declarations. While this matched the behavior of gcc on Linux*, it did not match the gcc behavior on Mac OS. In version 10.1, the extra underscore is no longer generated.

System Requirements

Notes:

Installation

Please see the separate Installation Guide for information on installing the compiler and setting up the compiler environment.

Known Issues

General Xcode* Usage Issues

.o files must be saved for debugging

Starting with Xcode 2.3, the Dwarf debugging information is stored in the object (.o) files. These object files are accessed by debuggers to obtain information related to the application being debugged and thus must be available for symbolic debugging.

In cases where a program is compiled and linked in one command, such as:

icc -g -o hello.exe hello.c

the object files are generated by the compiler but deleted before the command completes.

To make such an application debuggable, use the compiler switch -save-temps to direct the compiler to keep the .o files, for example:

icc -g -save-temps -o hello.exe hello.c

This switch is not necessary when the application is built in two steps with explicit production of a .o file, for example:

icc -c -g -o hello.o hello.c
icc -g -o hello.exe hello.o

Warnings During Linking

When linking an application compiled with the Intel compiler, you may receive numerous warnings from ld of the form:

ld: warning suggest use of -bind_at_load, as lazy binding may result in errors or different symbols being used
symbol _fdim used from dynamic library /usr/lib/system/libmathCommon.A.dylib(single module) not from earlier dynamic library libimf.dylib(fdim_stub.o)
[…]

This warning occurs for 16 symbols found in both libimf.dylib and libmathCommon.A.dyblib. It happens only in the case where Intel libraries are linked dynamically (the default); linking Intel libraries statically will not yield these warnings. In cases we have evaluated, the symbols in question were properly linked from libimf.dylib in the executable or dynamic library being linked. These warning messages can be ignored.

You can use "otool -vH <executable>" to verify which dynamic libraries the symbols are resolved from.

Library not loaded error when running application

When running an application built with the Intel compiler, you may see an error of the form:

dyld:Library not loaded:libsvml.dylib
reason: image not found

This error occurs when the Intel dynamic libraries cannot be located. To resolve this, follow these steps:

Technical Support

If you did not register your compiler during installation, please do so at the Intel® Software Development Products Registration Center. Registration entitles you to free technical support, product updates and upgrades for the duration of the support term.

For information about how to find Technical Support, Product Updates, Users Forums, FAQs, tips and tricks, and other support information, please visit: http://www.intel.com/software/products/support/cmac.

Note: If your distributor provides technical support for this product, please contact them for support rather than Intel.

Submitting Issues

Steps to submit an issue:

  1. Go to http://www.intel.com/software/products/support and click on the link for Intel® Premier Support.
  2. Log in to the site. Note that your username and password are case-sensitive.
  3. Click on the "Go" button next to the "Product" drop-down list.
  4. Click on the "Submit Issue" link in the left navigation bar.
  5. Choose "Development Environment (tools,SDV,EAP)" from the "Product Type" drop-down list.
  6. If this is a software or license-related issue, choose " Intel(R) C++ Compiler, Mac OS* X" from the "Product Name" drop-down list.
  7. Enter your question and complete the fields in the windows that follow to successfully submit the issue.

Note: Please notify your support representative prior to submitting source code where access needs to be restricted to certain countries to determine if this request can be accommodated.

Guidelines for problem report or product suggestion:

  1. Describe your difficulty or suggestion.
    For problem reports please be as specific as possible, so that we may reproduce the problem. For compiler problem reports, please include the compiler options and a small test case if possible.
  2. Describe your system configuration information.

    Get the Intel C++ Compiler's Package ID with the following commands:
        > icc -V
    and copy the "Package ID" (e.g. m_cc_x_10.1.xxx) from the output into the corresponding Intel® Premier Support field. Please include any other specific information that may be relevant to helping us to reproduce and address your concern.

  3. If you were not able to install the compiler or cannot get the Package ID, enter the filename you downloaded as the package ID.

Resolved Issues

Please review <package ID>_README (e.g. m_cc_x_10.1.xxx_README), available for download from Intel® Software Development Products Registration Center Product Downloads, to see which issues have been resolved in the latest version of the compiler.

Compiler Error Source Reducer (CESR)

Compiler Error Source Reducer (CESR) is a set of utilities which are useful individually or collectively in gathering, reducing, pinpointing, protecting, documenting, and bundling test cases comprised of C/C++ or Fortran source code. It can be helpful if you have a large application for which you want to extract a small test case for submission to Intel® Premier Support. CESR can be downloaded from Intel® Software Development Products Registration Center Product Downloads. Select your product and in the version dropdown, select CESR. CESR is unsupported and should be considered experimental, but we welcome your feedback on it through Intel® Premier Support. CESR requires prior installation of Python* 2.2 or newer.

Documentation

The Intel® C++ Compiler includes extensive user’s guide and reference documentation. You can view the list of available documentation by locating and opening the file alias in the <install-dir> folder; the file alias is Intel(R) C++ Compiler Documentation. (The alias target file is <install-dir>/doc/Doc_Index.html.)

You can gain a quick understanding of compiler operation by executing the procedures in the Getting Started with the Intel(R) C++ Compiler 10.1 for Mac OS* X document. You can view the getting started information by locating and opening the file alias in the <install-dir> folder; the file alias is Getting Started with the Intel(R) C++ Compiler. (The alias target file is <install-dir>/doc/Getting_Started.html.)

Additional Information

Related Products and Services

Information on Intel software development products is available at http://www.intel.com/software/products.

Disclaimer and Legal Information

INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R) PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.

Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.

The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.

Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.

Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or by visiting Intel's Web Site.

Celeron, Centrino, Intel, Intel logo, Intel386, Intel486, Intel Core, Itanium, MMX, Pentium, VTune, and Xeon are trademarks of Intel Corporation in the U.S. and other countries.

* Other names and brands may be claimed as the property of others.

Copyright (C) 2007, Intel Corporation. All Rights Reserved.