Skip to content

Orange C-v6.0.44.2

Compare
Choose a tag to compare
@LADSoft LADSoft released this 26 Apr 18:51

this release reworks the assembler so that it will additionally parse ATT assembler sources, and splits the compiler into three pieces for better maintenance. It also removes OCIDE from the install and into a separate github project. Changes are as follows:

  • project: fix bugs that would not allow compiling in VS2019
  • project: add new appveyor builds for debugger and code analyzer; add 7z format to build artifacts
  • project: minor changes to make files
  • project: update tool help displays
  • windows installer: allow installing in a 'user' account
  • occ: fix rare problem where strength reduction could create an invalid multiply instruction
  • occ: 'char *xx[]' should be equivalent to 'char *(xx[])' (compiler treats them differently)
  • occ: fix error generated when declaring a scoped enum that had been forward declared.
  • occ: fix problem with shared expression node getting modified (could result in invalid ASM code)
  • occ: fix recursion problem in debug info, for function types that reference themselves in their argument list
  • occ: fix { somestruct a; a = { 0 }; } in C++ mode
  • occ: emit a more useful diagnostic for things like 'sizeof((int))'
  • occ: fix rare problem in peephole optimizer that could create bad code
  • occ: add /g as an alias for /v
  • occ: replace the preprocessor with a newer version
  • occ: replace under the hood utility code with the standard version used by the other tools
  • occ: local static variables with the same name used the same name were not differentiated in memory
  • occ: clean up clang warnings relating to the floating point structure
  • occ: add normal method to push/pop macros
  • occ: generate error if using floating point in a preprocessor expression
  • occ: fix rare problem where constant evaluation could crash optimizer
  • occ: fix some crashes on invalid input
  • occ: fix some problems zeroing structures in a function but not in a declaration.
  • occ: handle constant evaluation for complement operation correctly
  • occ: fix sizeof an array which is a function param to be sizeof(void *)
  • occ: add attribute((stdcall)) and parse for attributes in a couple of new places
  • occ: allow argument which is an array surrounded by parenthesis
  • occ: fix some preprocessor replacement issues found by c-testsuite tests
  • occ: handle cast to structured constant which is in the global space
  • occ: fix call to address which is an integer constant to generate correct code
  • occ: fix a vagary wherein switch-case statements without brackets did not compile properly
  • occ: optimize constant expressions involving and, or, and exclusive or a little better
  • occ: handle VA_ARGS for empty argument lists properly
  • occ: fix problem with capturing variables declared in nested lambdas
  • occ: fix problem with not being able to declare variables in a 'default' clause
  • occ: fix problem where sometimes a type used in a template prototype would not be expanded properly
  • occ: 'main' is inaccessible to the runtime if it is prototyped
  • occ: auto type derived from array type is considered an LVALUE
  • occ: string in hook was demoted to RVALUE
  • occ: using variadic templates for a variable length argument list didn't promote arrays to pointers
  • occ: fix compiler crash when generating debug type info for a union
  • occ: fix problem where a complex constant in a CMP instruction could be optimized to zero by the peephole optimizer
  • occ: fix problem with template parameter lookup: sometimes returned the wrong value
  • occ: fix bug in peephole optimizations
  • occ: allow type casts in preprocessor expressions
  • occ: handle const errors a little better
  • occ: fix problems with constant evaluation
  • occ: handle a switch-case structure that doesn't have braces for a block
  • occ: fix code generation for call to an address which is a constant value
  • occ: fix cast to structured constant to work in C++ mode
  • occ: allow pointer qualifiers in the array specifiers of an unsized VLA
  • occ: fix an argument which is an array surrounded by parenthesis to parse correctly
  • occ: fix sizeof an arrary which is a function argument to be the size of a pointer.
  • occ: fix various problems with code generation for c11 thread local storage type
  • occ: make comparison between 'long' and 'unsigned' an unsigned comparison when sizeof(unsigned) == sizeof(long)
  • occ: fix EBP based stack frame to work again
  • occ: compile .CC files as C++
  • occ: sizeof(un undefined structure) should generate an error
  • occ: error for undefined static functions is too strict. Make it a warning, hide it if the function is unused.
  • occ: don't generate a 'function must return value' warning for functions when they end with 'exit(xxx)'
  • occ: fix 'expression has no results' error when a hook is used where one of the prongs would not generate the error.
  • occ/olink/dlpe: add switches for generating .DEF files from DLLs
  • occ: fix problem where destructors used in the array-style destructor would not work if they were in a DLL.
  • occ: fix preprocessor bug when stringizing in the middle of a long string
  • occ: initializing a typdefed array of structures doesn't work...
  • occ: only simple constants could be initialized in the thread local storage initialization region
  • occ: add __declspec(align(xx))
  • occ: calling things like (imported_func)(args) (note the parenthesis around the function call) crashed the built executable
  • occ: fix bug in peephole optimizer, statements like "(a == 4 != c == 4) could be generated incorrectly for complex memory accesses
  • occ: statements like : char array[256] = {} did not generate any code.
  • occ: don't use 'rand' and friends when generating compiler-generated names
  • occ: improve assembly-language output compatibility with NASM.
  • occil: fix problem with generating code that shifted by an int64 constant
  • occil: fix problem with a function call in the middle of a variable arguments sequence resulting in bad code
  • occil: fix problem with things like (void)((argc == 1) && myfunc()) getting optimized wrong
  • occil: fix crash on the following code sequence: char c = "hello"[0];
  • occil: fix problems with compiling char c = "hello"[0];
  • dlpe: don't generate fixups for the constants used in thread local storage lookups
  • dlpe: add support for SOURCE_DATE_EPOCH in the binary timestamps.
  • oasm: add 'gas' syntax
  • oasm: set default assembler word size to 32 bits
  • oasm: add gas mnemonics, operands, and directives
  • oasm: support 8 byte integers with DQ and friends (only supported floats before)
  • onm: was broken for a while, fixed it
  • ocide, tools: add support for UTF8 and UCS2LE BOMs
  • ocide: allow opening a CPJ file directly on the command line
  • ocide/orc: could not click on an error and open the related RC file
  • ocide: fix code completion analyzer, fix various crashes
  • occpr: (code completion analyzer) fix many crashes on invalid input
  • olink: fix library search order to be more like other windows compilers
  • general: started work on taking care of bugs found by static analysis
  • rtl: fix printf() and friends to work properly with long double variables
  • rtl: throwing standard C++ classes such as the std::runtime wouldn't work when compiled against lscrtl.dll
  • rtl: support more errno values
  • rtl, tools: update to latest version of SQLITE3
  • rtl: fix nl_types.h to work standalone in C code
  • rtl: in command lines, the sequence '\"' was contracted incorrectly
  • rtl: fix printf of long double type to work again
  • rtl: add alloca.h
  • rtl: localtime: adjust for DST properly
  • tests: add new tests for code analyzer and preprocessor

note that this is a WIP, right now the MSDOS binaries will not work. They will be fixed in the next released.