Orange C 5.52.1 is released

This release fixes many C++ 11 bugs.

This version successfully compiled the compiler package, and while several programs seem to work properly it needs more vetting.

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: expressions involving bit fields did not get evaluated properly unless the expression was an assignment or comparison
  • occ: fix bug with operator-> returning pointer to class: if this was used as a function argument bad code would be generated
  • occ: move constructors or assignment operators could sometimes be called when unintended when invoked in a return statement. (e.g. it would zero out strings during a construction or copy to another string)
  • occ: there were bugs comparing a member pointer variable against zero
  • occ: member pointer function variable could not be compare to a function
  • occ: for a reference type, it didn't call virtual functions properly
  • occ: sometimes an object would be considered by-ref when it wasn't really messed up function returns from constructors and other functions that return a pointer to structure
  • occ: during global destruction of objects, destructor call for an array could zero out the object before destroying it
  • occ: constructor calls qualified with class/namespace selectors could be treated as declarations
  • occ: references to member pointers as function parameters resulted in invalid code
  • occ: taking the address of a reference to a pointer and passing it to a function resulted in bad code
  • occ: in initializing a structure from another structure, a this pointer could be inserted when it shouldn't be
  • occ: temporary classes created during an expression would not get a destructor call
  • occ: ! and some other unary operators generated code to perform the function even after calling an overloaded operator function. (so the function got applied twice)
  • occ: when objects that have to be constructed are default parameters, the space for the objects does not get allocated if they are used.
  • libcxx: fix problem with not enough space being allocated for locale in ios structure
  • clibs: fix malloc/free to detect doubly freed pointers with more alacrity