Release notes for ARM Compiler 5.04 update 5 (build 231)

Introduction

This document contains the release notes for this release of ARM Compiler. They provide a summary of the changes in this release, including new features and defect fixes. Changes are listed since the previous release, ARM Compiler 5.04 update 4. Each itemized change is accompanied by a unique SDCOMP-<NNNNN> identifier. If you need to contact ARM about a specific issue within these release notes, please quote the appropriate identifier.

This is an Extended Maintenance (EM) release of ARM Compiler, where updates containing critical corrections are provided beyond the end of a normal maintenance period. Extended Maintenance updates to ARM Compiler 5.04 are planned through Q3 2015 although ARM, at its discretion, may elect to extend the maintenance period. EM releases are available to licensees of DS-5 Ultimate Edition or Keil MDK Professional Edition with valid Support and Maintenance. EM releases can be downloaded from https://silver.arm.com/browse/ACOMP.

Defect fixes in ARM Compiler 5.04 update 5

Compiler (armcc)

  • [SDCOMP-29633]  When a static variable in an inline function or an inline class member function has a section attribute, this attribute was ignored and the variable was placed in a section with a different name from the name given by the attribute. This could also cause an Internal fault. This has been fixed.

  • [SDCOMP-29544]  In certain circumstances, when compiling at -O3 -Otime, the compiler could incorrectly assume that the values of elements in a multi-dimensional array would not change from their initial values. This could result in incorrect code. This has been fixed.

  • [SDCOMP-29543]  In certain circumstances, when compiling at -O3 -Otime, the compiler could incorrectly fail to sign extend the return value for a function that returns a signed integer when the expression receiving the returned value is of a wider integer type. This has been fixed.

  • [SDCOMP-29542]  In certain circumstances, when compiling at -O3 -Otime, the compiler could incorrectly treat the result of an equality operator or a relational operator as unsigned int instead of int. This has been fixed.

  • [SDCOMP-29464]  In rare circumstances, when compiling at -O1 or above, the compiler could generate a sequence of code that incorrectly used a flag-setting instruction, corrupting the flags required by a subsequent flag-reading instruction. This has been fixed.

  • [SDCOMP-29304]  In rare circumstances, when compiling at -O2 or above, the compiler could generate incorrect code when the result of an arithmetic expression containing a bitwise Exclusive OR and a bitwise OR operator is assigned to a variable of integer type that is smaller than a 32-bit integer. This has been fixed

  • [SDCOMP-29280]  In rare circumstances, when compiling at -O1 or above, the compiler could generate incorrect code when a location in memory is written to without using volatile followed by another write to the same location that does use volatile. This has been fixed.

  • [SDCOMP-29267]  In rare circumstances, when compiling at -O2 or above, the compiler could incorrectly optimize an expression involving two operators that are either:

    • Both bitwise OR.
    • Both bitwise Exclusive OR.
    • A combination of bitwise OR and bitwise Exclusive OR.

    This has been fixed.

  • [SDCOMP-29261]  In rare circumstances, when compiling for Thumb state, the compiler could generate incorrect code for a program that reads from a number of contiguous memory locations where it can be determined that some of the reads can be eliminated. This could result in a failure to load some of the required data. This has been fixed.

  • [SDCOMP-29252]  In rare circumstances, when compiling at -O2 or above, the compiler could incorrectly allocate variables local to a block of code to the same memory locations as variables outside of the block of code. This has been fixed.

  • [SDCOMP-29222]  In rare circumstances, when compiling for ARM state, the compiler could generate incorrect code for calculating offsets to data stored in contiguous memory locations. This could result in a value being written to or read from an incorrect address. This has been fixed.

  • [SDCOMP-29191]  In rare circumstances, when compiling with -Otime --vectorize at -O2 or above, the compiler could generate incorrect code when vectorizing a loop that writes to an array. This has been fixed.

  • [SDCOMP-29189]  In rare circumstances, when compiling with -Otime --vectorize at -O2 or above, the compiler could generate incorrect code for a loop that casts the elements of an array of integer type to float to perform a floating point calculation, and the result is cast back to an integer type for further calculations. This has been fixed.

  • [SDCOMP-29160]  In certain circumstances, when compiling at -O3 -Otime, the compiler could generate incorrect code for a for loop that modifies a pointer which aliases the loop index. This could result in an incorrect number of iterations of the loop. This has been fixed.

  • [SDCOMP-29158]  In rare circumstances, when compiling at -O3 -Otime, the compiler could generate incorrect code for a program containing nested for loops, resulting in an inner loop body incorrectly being executed. This has been fixed.

  • [SDCOMP-29157]  In rare circumstances, when compiling at -O3 -Otime, the compiler could generate incorrect code for expressions of the form A & B when one of A or B can be evaluated at compile time to zero and the other expression contains an increment or decrement operator. This has been fixed.

  • [SDCOMP-29155]  In rare circumstances, when compiling at -O3 -Otime, the compiler could generate incorrect code when a parameter of a function is always passed the same value, and the value is not in range of the type of the parameter. This has been fixed.

  • [SDCOMP-29151]  In rare circumstances, when compiling at -O3 -Otime, the compiler could generate incorrect code for a control statement having a controlling expression of the form A <= B or A > B, where expression A can be evaluated at compile time to zero and B is of an unsigned type. This has been fixed.

  • [SDCOMP-29117]  In rare circumstances, when compiling at -O2 or above, the compiler could generate code containing execution paths that do not have correctly balanced PUSH and POP instructions. This could corrupt the stack, resulting in incorrect behavior. This has been fixed.

Libraries

  • [SDCOMP-29102]  The C library function strftime() would generate incorrect results when using the %C or %h format specifiers. This has been fixed.

Other issues

  • [SDCOMP-29337]  In certain circumstances, the compiler could incorrectly generate Error: C9558E: System clock tampering detected. License checkout will fail. if files with very old timestamps were present in the file system. This has been fixed.

Copyright © 2015 ARM Limited. All rights reserved. ARM ARN 0005W
Non-Confidential ID091715