- Important information
- New features
- Known problems
- Program corrections
- User documentation corrections
- Miscellaneous
- Release history
Important information
-
To avoid the space-consuming tables used for character classification (
ctype.h
), define the preprocessor symbol__NO_CTYPE_TABLES
before thectype.h
file is included. -
The compiler now avoids the LDRD instruction with the base register in list when generating code for Cortex-M3. This is to work around the Cortex-M3 erratum 602117.
-
In EWARM 6.10.2:
The
--guard_calls
command line option is introduced. Note,--guard_calls
must always be used in applications written in EC++/C++ that need thread-safe library function calls. For more information, see DLIB multi-threaded support.The
--no_guard_calls
command line option is removed.The
--aeabi
command line option has modified behavior: Guard calls are not used by default.
Migration instructions from IAR C/C++ Compiler for ARM 5.x and 6.10.1 to IAR C/C++ Compiler for ARM 6.10.2:
--aeabi
(without--no_guard_calls
) shall be replaced with--aeabi --guard_calls
--aeabi --no_guard_calls
shall be replaced with--aeabi
New features
The product now uses the current C standard defined in 1999, known as C99, as the default C language. The previous major version of the product used the former C standard defined in 1989, known as C89. C89 can still be used in the compiler by using the
--c89
option. The product will not be totally backwards-compatible though, because the support for some C99 features has been withdrawn. Variable length arrays, VLAs, in C99, are not supported in the default C language. They can be enabled with the option--vla
. The C library supports all C99 functionality, and more, but only if used with the C99 language or with any C++ language. If used with the C89 language, C99-added functionality will not be allowed.The implementation of EC++ and EEC++ has not changed in any major way.
Support for the C++ language has been added. By default, it fully supports the 2003 C++ standard, but can be used with exceptions and/or runtime type information disabled by using
--no_exceptions
and--no_rtti
respectively.Thread-safe libraries
The DLIB library now supports being used in a threaded environment. Some library systems, like the heap and the file structure, will be guarded by locks. Other library systems, likelocale
anderrno
, will have their static data allocated in thread-local storage. The DLIB thread support can either be supported by your chosen RTOS or can be manually implemented. For more information, see DLIB multi-threaded support.The compiler and assembler now automatically know where the library's system headers reside. You can control the compiler using the options:
--dlib_config
, to choose a configuration in the DLIB library.--system_include_dir
, to override the directory to use as system header base.--no_system_include
, to turn the automation off.
The compiler can now optimize some floating-point expressions more agressively by using the option
--relaxed_fp
. If enabled, the compiler tries to reduce the floating-point type used in floating-point expressions. This can cause a small loss of accuracy.
Known problems
-
If your code contains hundreds of global variables and you compile it at a high optimization level, the compilation time might be very long.
[EW14199] -
Special function registers (SFRs) declared as write-only in the header files included with the product are not treated as such by the compiler. The generated code may incorrectly use read-modify-writeback sequences.
[EW14302] -
The C/C++ library header file
time.h
declares the library functionmktime
. When called with a negative value in the broken-down time componenttm_isdst
, which is part of thetm
struct function parameter,mktime
fails to determine whether Daylight Saving Time is active for the specified time or not.
[EW14632]
Program corrections
-
The library function
fpclassify()
handles normal and subnormal numbers correctly.
[EW21098] -
Small
memcpy
calls are no longer transformed to assignments unless both the source and destination addresses have correct alignment.
[EW21193] -
The compiler now checks that different kinds of variables are no placed in the same section.
[EW21351] -
An internal error should no longer occur if
__segment_begin()
or__segment_end()
is used in conditional code.
[EW21770, EW21838] -
Loops that decremented an unsigned loop counter past zero could in some cases be incorrectly optimized.
[EW21795] -
Now all system headers do not generate MISRA errors.
[EW21799] -
When optimizing, the the compiler now handles an initializer containing a function pointer with an offset.
[EW21870] -
The endian attribute is not supported for pointers or arrays. Now an endian attribute can no longer be specified for pointers or arrays.
[EW21887] -
Reversal of byte order is now correctly performed also for combinations of endian attributes and unaligned accesses. Previously, this was in some cases not handled.
[EW21888] -
At optimization level High, speed-optimizing small loops similar to
could in some cases be incorrectly unrolled and cause an internal error.int test(int n) { while (n-- > 0) if (!foo(n)) break; return n; }
[EW21949] -
A class with a member that is a nameless struct, or an array of nameless structs, where at least one of the members is not a PoD, could cause an internal error while compiling.
[EW21958] -
A while loop with a preincrement or predecrement in the loop test could be incorrectly optimized if the final part of the loop body was a do loop.
[EW21999] -
The compiler will no longer merge instruction sequences (through cross call or cross jump optimizations) that are not equal, due to the register operand of a Thumb-2 compare-and-branch instruction (
CBZ
orCBNZ
).
[EW22000] -
When an
enum
is specified as a parameter or return type before it has been defined, the compiler will no longer record the wrong num size (attributeTag_ABI_enum_size
) in the ELF file.
[EW22013] -
In Thumb-2, the compiler no longer issues an internal error in an attempt to widen
MULS.N
toMULS.W
(which is not a Thumb-2 instruction) to achieve a 4-byte alignment of a following instruction or label.
[EW22018] -
The compiler can now handle a function symbol as an argument to compiler optimized functions like
memcpy
.
[EW22052] -
In EWARM 6.10.2:
Nestedfor
loops where the inner loop's initial or final value was the outer loop's variable, multiplied with a constant scaling factor or with a constant offset, no longer causes an internal error on high optimization.
[EW22078] -
In EWARM 6.10.2:
Somewhile
loops with multiple exits no longer causes an internal error on high optimization.
[EW22080] -
In EWARM 6.10.2:
Constant data is now placed in the.rodata
section if the compiler has not generated a directADR
reference. If there is anADR
reference, the constant data is placed in the.text
section.
[EW22081] -
In EWARM 6.10.2:
Standard C++ is now enabled also for the kickstart products.
[EW22089] -
In EWARM 6.10.2:
Now the MISRA-C:2004 rule 20.2 checker can handle a long preprocessor symbol define.
[EW22117] -
In EWARM 6.10.2:
For Cortex-M3, the compiler no longer attempts to generate a sub-routine for identical instruction sequences (cross-call) that end with a call to a software interrupt function (SWI
), which would result in an internal error.
[EW22118] -
In EWARM 6.10.2:
The compiler no longer removes code that uses the result of anSTREX
instruction (the instruction can be generated by using the__STREX
intrinsic function).
[EW22119] -
In EWARM 6.10.2:
The compiler no longer uses a signed 16-bit value as the immediate operand for theMOVT
instruction. A 16-bit unsigned value is used instead, becauseMOVT
expects an immediate value between 0 and 65535.
[EW22121] -
In EWARM 6.10.2:
Evaluating a function address without using the result no longer causes an internal error.
[EW22146]
User documentation corrections
-
None.
Miscellaneous
-
Generate workarounds for hardware problems:
-
Functional problem Core.1 in NXP device LPC2478: Incorrect update of the Abort Link register in Thumb state.
Workaround generated withiccarm --enable_hardware_workaround=NXP_Core.1
-
Release history
Copyright © 1999-2011 IAR Systems AB.