This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Change list for RealView Compilation Tools available?

The Release_Notes.htm file in the ARM compiler gives an overview of changes made between MDK-ARM versions, but is there somewhere I can find out exactly what bug fixes/improvements have been made to the RealView compiler itself?

The behaviour of the compiler has changed between MDK-ARM versions 4.03a and 4.10, which is not surprising since the compiler is a new version in this release. However, this has resulted in some code developed on 4.10 (which compiles with no warnings) to fail with an error during compilation on 4.03a. Specifically I have a function which accepts a pointer to void, and am passing a function pointer to it.

I can make the code compile on both versions with some casting, but I would like to be able to see if this issue is known and if there are other issues we should be wary of.

Parents
  • There is a rule that "A pointer to void may be converted to or from a pointer to any incomplete or object type." So you may typecast between a void pointer and some other data type.

    (Since I've been challenged to quote chapter and verse: that rule quoted by Per is actually clause 6.3.2.3, paragraph 1 of C99).

    And the clue to the case at hand is that a function pointer is not a "pointer to any incomplete or object type" (see C99 6.2.5, paragraph 1).

    So conversion between function pointers and (void *) is not specified by any rule of the standard, which puts you into undefined behaviour land by default.

    The C programming languages supports Harvard architecures, and that means code and data pointers are assumed to be fundamentally different things. There is no allowed way to convert from one to the other.

Reply
  • There is a rule that "A pointer to void may be converted to or from a pointer to any incomplete or object type." So you may typecast between a void pointer and some other data type.

    (Since I've been challenged to quote chapter and verse: that rule quoted by Per is actually clause 6.3.2.3, paragraph 1 of C99).

    And the clue to the case at hand is that a function pointer is not a "pointer to any incomplete or object type" (see C99 6.2.5, paragraph 1).

    So conversion between function pointers and (void *) is not specified by any rule of the standard, which puts you into undefined behaviour land by default.

    The C programming languages supports Harvard architecures, and that means code and data pointers are assumed to be fundamentally different things. There is no allowed way to convert from one to the other.

Children
No data