Orange C 5.63.1 is released

This version is a bug fix release.

Some of the bugs were found as a result of running CSMITH on the compiler. CSMITH is a random program generator used to stress compilers.

Overall CSMITH didn't find any parsing errors but there were some problems with taking the address of static const variables, and other backend problems that it isolated. Also it showed that the expression optimizer could take a very long time for large expressions.

CMSITH also showed some problems with the way OCC does inlining; large functions that have a lot of inlining going on could run the compiler out of memory. I fixed that problem but some of the worst offenders can take a while to compile. That situation seems somewhat rare though.

In recent versions, the name mangling for C++ has changed, and the object library file format has changed. Please completely rebuild your projects.

Some of the changes are as follows

  • occ: fix problem with crash when a close brace was missing at the end of the file
  • occ: add support for expressions like a ? : b
  • occ: clean up the error handling when returning structured values the wrong way
  • occ: if you took the address of a static const var two or more times it would be replicated in the output file.
  • occ: if the address of a static const var is used in a global declaration, a bad output file would be generated
  • occ: the expression optimizer could take an extremely long time for very complex expressions
  • occ: fix a problem where a an x86 comparison opcode could sometimes be optimized to compare two immediates
  • occ: fix problems generating too-large constants in assembly language output causing assemble errors
  • occ: fix problems with csmith output: there is heavy inlining in these files and too many were running the compiler out of memory
  • occ: fix a problem where a bit operation was attempted to be generated with an inequality
  • setup: access ORANGEC environment variable off of HKEY_CURRENT_USER instead of HKEY_LOCAL_MACHINE
  • setup: propagate registry changes before running the IDE from the setup program