OrangeC Versions Save

OrangeC Compiler And Tool Chain

Orange-C-v6.73.1

7 months ago

This is a maintanenance release for ongoing work with cmake integrations. The primary motivation for it is to upgrade the sqlite3 amalgamate being used by the project, to fix a bug with creating indexes in the debug information file.

fixes in this release:

  • project: update sqlite3 to latest version
  • olink: fix bug with debug info for type information
  • occ: get rid of instrumentation
  • bug fixes for lscrtl.dll when used by multiple modules simultaneously

Orange-C-v6.72.4

7 months ago

this is a maintenance release. The primary reason for having a release now is to support various changes that are required for cmake support, so that we can continue the cmake integration. There is also work to better support the gnu cobol compiler's test suite, and continuing work for C23 support.

We also switched the versioning back to the standard three-number scheme now instead of continuing to use the 4-digit scheme used by windows.

  • project: move appveyor image to VS2022 version
  • project: choosing versioning to use the standard 3 integer versioning scheme instead of the windows 4 integer scheme (except in RC files)
  • occ: add various C23 functionality, including _BitInt
  • occ: fix backend bug where compiling multiple files on a single command line could result in bad behavior
  • occ: handle static const int properly when using it in a structure to export a const value
  • occ: handle extern const int properly when using it in a namespace to export a const value
  • occ: allow __declspec(export) to be placed before the 'struct' keyword
  • occ: fix various bugs in compiler related to buffers being too small to hold command lines
  • occ: fix command line help for fstack-protector flags
  • occ: when both creating dependencies and compiling files, don't elide the error display
  • occ: fix random bug when compiling assembly code in a C file
  • occ: handle escaping in make stubs properly
  • occ: rewrite optimizer for more efficient memory management
  • occ: trying to make a static library didn't work if the output file name had spaces in it
  • occ: fix a bug where casting a function name to a pointer then using it as an array crashed occ
  • occ: handle '.' character in directory names better
  • occ: handle the situation with computed gotos better
  • occ: support exporting functions in exe files
  • occ: fix pointer aliasing code to understand local static variables better
  • occ: fix bug where destructors could be called too soon in complex function trees
  • omake: handle escaping properly
  • omake: fix bug that inserted extra spaces on the SH command line
  • rtl: fix various bugs related to buffers being too small to hold command lines
  • rtl: fix getexecname() when using shared runtime library
  • rtl: fix some problems with stat and other time functions getting the 'dst' flag wrong on random occasions
  • rtl: replace rpmalloc with dlea allocator again
  • rtl: fix bug in exception handling: wrong data size calloced
  • rtl: fix lscrtl.dll import library to work properly again
  • rtl: update import records for kernel32 to the latest kernel
  • rtl: remove a printf from the C23 checked runtime library functions; improve linkage
  • rtl: fix bug that made 'atexit' not work reliably in shared runtime library
  • rtl: fix bugs in mkdir()
  • rtl: fix comparision used by memcmp to be unsigned

Orange-C-Orange-C-v6.0.71.1

9 months ago

This release was primarily bug fixes and testing. Omake is much improved both in terms of resolving crashes and in terms of compatibility with GNU make, and various compiler bugs were fixed; some new library functions were added as well and there are a few new features such as delay loading of dlls. Work for C23 is partway done at this point.

changes include:

  • add support for github actions with both linux and windows builds
  • remove support for travis-ci builds
  • remove support for broken BCC32 and RADSTUDIO builds
  • rewrite visual studio solution to be cleaner
  • improve gcc wrappers
  • add wrappers for common MSVC tools
  • toolchain: rewrites to improve clarity in startup code for all the tools
  • toolchain: rewrites to use c++ style c language headers
  • toolchain: add --out-implib and --output-def
  • toolchain: rewrite to not use custom iterator names when that is possible
  • toolchain: rewrite to use std::shared_ptr when that is more reasonable than std::unique_ptr
  • toolchain: rewrite for more standard usage of 'HAVE_UNISTD_H'
  • toolchain: rewrite to use StringHash more liberally as a string hashing function on maps
  • toolchain: rewrite to use scoped enumerations for the major enumerations
  • build: copy orc.cfg to \orangec\src
  • update various documentation
  • prefer ',' to '=' as a separator while parsing command line arguemnts
  • fix various problems required for building on linux
  • occ: don't allow WinMain to be mangled with C++ mangling
  • occ: fix some bugs with anonymous structure names changing from one compilation unit to the next
  • occ: 'auto' type can be used with multiple declarations
  • occ: for-range index variable shouldn't be visible to to for-range expression
  • occ: don't strip extension before adding '.l' for libraries
  • occ: fix some problems with bailing with an error about end of file
  • occ: using operator new[] with and index which is type long long generated bad code
  • occ: fix some bugs generating names for static const ints that have their address taken
  • occ: fix rare crash when generating debug symbols
  • occ: fix rare bug at end of file
  • occ: add attribute((constructor)) and __attribute((destructor))
  • occ: add #pragma exit
  • occ: prefer a type to a variable when '::' is used
  • occ: cleanup various vagaries with response files and command line arguments
  • occ: add CHAR_SIGNED and CHAR__UNSIGNED preprocessor macros
  • occ: the constructor 'sizeof(int(*)()) crashed when compiling for C++
  • occ: std::less()(...) didn't resolve when argument was a shared_ptr
  • occ: -D and -U switches can have a space between the switch and its argument
  • occ: -D switch was broken when the argument had a semicolon in it
  • occ: fix some problems with initializer lists
  • occ: fix problem where including stdio.h with quotes instead of <> didn't work
  • occ: fix various problems with using structured return types on lambda functions
  • occ: allow comparison between std::function<>() and nullptr
  • occ: generate errors more liberally when trying to cast struct to int and no conversions apply (also in C mode)
  • occ: make CallOfNonFunction error clearer for C++ code
  • occ: on rare occasions, conversion from a base type to derived type would be handled incorrectly
  • occ: add pseudo-constructor for trivial structures
  • occ: add gcc-style stack canaries
  • occ: add basic runtime/heap checks
  • occ: beginning work for C23
  • occ: scoped enumerations can later be referenced without specifying it as scoped
  • occ: hook operator could never result in a return type which is a scoped enumeration
  • occ: fully specialized function declarations should be allowed to have a template<> header
  • occ: support for better linker detection of library files
  • occ: downgrade 'suspicious pointer conversion' message to be a trivial warning
  • occ: fix problem where RHS of a for-range declaration would be evalutated twice
  • occ: fix optimization for computed gotos to work properly
  • oimplib: generate a variety of import declarations to handle the various linkage use cases
  • omake: handle include paths properly
  • omake: handle 'private' and 'export' on target-specific variables
  • omake: add builtin rules and variables
  • omake: $(wildcard $(...)) didn't include directory names
  • omake: the results of a ($call...) should be macro-substituted
  • omake: fix some problems on msys2
  • omake: various fixes to process complex makefiles properly
  • omake: -p option crashed
  • omake: fix clash between the temporary file marker && and shell usage of &&
  • omake: fix $(shell ...) to work with shells other than cmd.exe
  • omake: putting a conditional on the same line as an else should be treated specially
  • omake: fix crash on windows 8
  • olink: support delay load
  • olink: prepend lib when searching for library files, check for both '.l' and '.lib' as extensions
  • ocpp: fix configuration file with correct default include paths
  • dlpe: don't generate fixup for constants specified on the linker command line
  • dlpe: generate delay-load structures in PE image
  • dlpe: allow extensions other than '.l' when creating import libraries
  • preprocessor: use += instead of '=' while parsing source lines
  • preprocessor: allow warnings to be elided or turned into errors
  • preprocessor: clean up how make stubs are generated
  • tests: various cleanup
  • rtl: add gdiplus headers
  • rtl: adujust startup/rundown priorities to match unix
  • rtl: add posix clock functions
  • rtl: add alarm and SIGALRM
  • rtl: add readlink
  • rtl: add dlopen and friends
  • rtl: add nanosleep
  • rtl: fix mismatch on declarations for memchr
  • rtl: add sys/param.h
  • rtl: add support for shlwapi.dll
  • rtl: add strnlen and wcsnlen
  • rtl: add support for stack canaries
  • rtl: unmangle names correctly in exception dumpo
  • rtl: add support for basic runtime/heap checks
  • rtl: unclutter the user namespace in the malloc() code
  • rtl: add support for delay-load
  • rtl: fix static thread protection for local static C++ initializations to work properly
  • rtl: add 'floor()' to lscrtl.dll
  • rtl: fix putenv to not have a buffer overflow
  • rtl: wputenv should use the correct environment
  • rtl: fix spawnxxx, execxxx to not have buffer overruns
  • rtl: bug fix to how calloc() is done
  • rtl: fix padding problem when '%#04x' was used with a small number
  • rtl: handle padding for '%#04b' properly

Orange-C-v6.0.70.2

10 months ago

Improvements to generated code, compiler speed

This version improves the generated code in terms of size and speed, and improves compile times. It also has various rewrites that improve maintainability.

Along the way there have been other bug fixes, as well as evaluating compilation of several new programs.

A list of changes follows:

  • fix various problems with the builds
  • adjust VC projects to use narrow character support
  • fix bugs compiling with clang
  • clean up some compiler warnings, clang/gcc
  • fix to compile various problematic third-party packages
  • occ: internal rewrites to improve the quality of source code/debugging experience
  • occ: internal rewrites to not compile functions that aren't needed
  • occ: internal rewrites to the inliner, for better code quality and faster optimization and less space used
  • occ: speed up parser
  • occ: add COUNTER predefined preprocessor variable
  • occ: fix problems with VA_ARGS
  • occ: fix preprocessor problem : macro arguments should be scanned for replacements before replacing the token
  • occ: allow alignof in C mode
  • occ: add the gcc extension for statements in expressions
  • occ: fix _Generic to work with typedefs
  • occ: fix problems with generating wide characters strings on odd byte boundaries
  • occ: optimize single element structures that can be stored in a register, to be returned in a register
  • occ: improve line data at the beginning of a function
  • occ: improve debug information within do-while blocks
  • occ: optimize the object files a little bit
  • occ: fix problems with -werror switch
  • occ: fix problems with C++14 switch
  • occ: clean up code generation for setne instructions
  • occ: add -static switch to generate static library directly from command line
  • occ: fix various problems compiling __invoke
  • occ: fix various problems that were highlighted due to all the rewrites
  • occ: inline destructors in debug mode
  • occ: fix code generation bugs
  • occ: clean up rtti accounting code generation
  • occ: 'empty' destructors don't need to be called during wind down of stack from during throw/catch
  • occ: fix some bugs with catch blocks being considered in an order other than the one presented in the source code
  • occ: interleave various things like member ptr and atexit code generation with the function generation a little better
  • occ: inline exception block creation/teardown, instead of calling library functions
  • occ: rework how accessibility checks are done
  • occ: standardize generation of vtabs: wherever the destructor is generated.
  • occ: fix bug with atomic long long stores
  • occ: fix optimizer bug where atomic-modify and store instructions could sometimes result in bad code
  • occ: beginnings of support for C23
  • occil: speed up code generation
  • occil: fix problem with duplicate field definitions
  • occil: fix problem where using a long as a shift count causes problems on windows 11
  • occpr: clean up extraneous errors
  • oasm: speed up assembler, and compiler back end
  • omake: don't create an error when .PHONY targets are used
  • omake: fix -j:0 not to crash omake
  • omake: fix default to be -j:1
  • omake: fix for lockup when a tool generated an error for -j > 1
  • rtl: add wchar_t to stdatomic.h
  • rtl: get rid of compiler warnings that occurred when #including inttypes.h
  • rtl: fix some problems with the windows headers
  • rtl: fix some problems with wide character functions
  • rtl: fix push/pop bug in dpmi.c
  • rtl: fix some bugs in the exception handling library
  • rtl: tag more functions for export
  • rtl: fix various problems that caused lscrtl.dll not to work

v6.0.62.2

1 year ago

Many changes were made in response to bug fix requests made by the community. One of the most important things that happened is that the Windows headers were completely overhauled; instead of the halfway useable headers we had we are now using the complete headers found in the Pelles C compiler. This is a more robust approach to windows headers.

There were also many bug fixes to the runtime library.

This is a list of changes:

  • project: fix some problems found by static analysis

  • project: update to VS2022 community

  • project: clean up make files

  • project: fix some issues in the MD documentation

  • project: define WIN32_LEAN_AND_MEAN throughout

  • project: add hooks to provide more information on crashes

  • project: add wrappers to emulate GCC and AR (translates switches)

  • occ: assigning to a structure returned by pointer should work

  • occ: fix problems initializing substructures with structured values

  • occ: add declspec(deprecated)

  • occ: two macros could match even if they have arguments

  • occ: get rid of C++ error about not being able to pass an array of structured values

  • occ: update #pragma pack to allow the push, pop syntax (for pelles C headers)

  • occ: allow compiler to be build with MINGW64 on MSYS2

  • occ: fix crash when using a wildcard to specify files on the command line

  • occ: fix bug in optimizer: strength reduction with a value returned from a function crashes

  • occ: handle __forceinline a little better

  • occ: fix multicharacter character constants to work a little better

  • occ: fix declarator assignment of structure elements, to clear out the entire structure

  • occ: clean up 'void function returns value' error

  • occ: fix command line help text: /o option definition was confusing

  • occ: fix crash when multiple files on the command line use the make_integer_seq builtin template

  • occ: '$' is a valid character within symbols

  • occ: add -funsigned-char

  • occ: add computed-goto

  • orc: expand prototype and structure parsing to handle more use cases

  • omake: fix a bug where white space in a define should have resulted in an EOL being inserted when the define was used

  • omake: could take more than the allotted number of job slots

  • rtl: use PELLES C windows headers, this is a more complete and standard set of headers

  • rtl: add missing flags to unix-style file headers

  • rtl: fix problem with inttypes.h macros not being declared in some cases

  • rtl: fix problem parsing signalling nans

  • rtl: fix time_t value to be correct

  • rtl: fix fstat to work a little better

  • rtl: fix _stat to work with CRTDLL.DLL

  • rtl: fix so that it can compile against lscrtl.dll again

  • rtl: add missing string, shift, and heap functions

  • rtl: fix some prototypes to use size_t

  • rtl: add wide character versions of various ANSI C functions

  • rtl: add 64-bit time_t and support it

  • rtl: add the various windows-style stat functions

  • rtl: fix bugs with wide character file i/o

  • rtl: add a 'placeholder' version of intrin.h which does nothing

  • rtl: update climp.dll to have more imported functions from the OS

  • rtl: support Windows XP by performing an indirect usage of GetLargePageMinimum only when available

  • rtl: null terminate fmemopen buffer when flushed or closed.

Orange-C-v6.0.61.1

1 year ago

Libcxx tests and omake

This release is primarily to take an initial look at the tests that come along with the libcxx library. Substantianal improvements to parsing and code generation were made as a result.

Omake was also updated with more C++ compatible code, and effort went into handling various issues with parallel makes

The following issues were addressed, along with many more improvements for handling the libcxx tests that aren't listed.

  • occ: various template handling fixes
  • occ: various constexpr fixes
  • occ: various noexcept fixes
  • occ: fix various problems with initializer lists
  • occ: fix various problems with the mangling/unmangling
  • occ: various other compiler fixes resulting from working with the libcxx test suite
  • occ: fix various crashes
  • occ: auto variables with the same name should be considered unique by the compiler
  • occ: handle some use cases where a structure could be used as a template argument of itself while compiling the template
  • occ: noreturn member functions were not considered as noreturn for error reporting
  • occ: select the primary class template when a specialization trys to use the primary as a friend
  • occ: recalculate structure offsets properly for recursive structures
  • occ: allow passing a volatile reference to a parameter of type const reference
  • occ: various compiler speedups.
  • occ: fix various bugs when compiling allocators with maps
  • occ: fix problems with value initialization of structures
  • occ: fix crash when using the structured return value of a function as an argument to another function
  • occ: fix is_constructible for various use cases
  • occ: fix various problems where constructors could not be found
  • occ: defer evaluation of constructors that are used in default arguments
  • occ: fix using statements to allow a broader range of function declarations
  • occ: fix some problems with partial function deductions
  • occ: fix unique_ptr/shared ptr iterators to work properly
  • occ: using constructor via open brace could be an rvalue candidate
  • occ: support __builtin_unreachable
  • occ: default for move constructors do not have a 'const' argument
  • occ: add unmangled names as comments in the assembler file output
  • occ: fix bug where line numbers were sometimes missing from the output files
  • occ: don't generate lambda functions with $$ at the beginning of the name
  • occ: fix some bugs when an array is placed inside a structure
  • occ: support DLLs in the command line
  • occ: some internal uses of alloca to reduce stack usage
  • occ: fix problem where debug file names were incorrect
  • occ: fix various problems with destructors in short-circuit expressions
  • occ: fix problems with destructors in arguments
  • occ: fix problems with destructors in conditional statements
  • occ: optimize to generate a TEST instruction in a certain use case
  • occ: fix bug where preprocessor expressions could interfere with template processing
  • occ: various internal refactoring
  • occ: by value arguments where not getting cleaned up at the end of the function
  • occ: fix problems with RTTI table generation
  • occ: fix various problems with atomic code gen
  • occ: change local static guards to be thread safe
  • occ: handle destruction of local statics in a more standard way
  • occ: return structures by value properly in C++ mode
  • occ: two functions don't have the same type if one returns by reference and the other doesn't
  • occ: do a better job of aligning structures on the stack
  • occ: dereference references returned by cast operators
  • occ: don't use a temporary when converting a structure to an arithmetic type in arguments
  • occ: fix corruption in catch blocks
  • occ: fix bug where floating point might not be evaluated correctly in the compiler
  • occ: don't consider overloaded function options for builtin operators that are fed scalars
  • occ: prefer 'bool' to 'nullptr' when passing constant zero or false as an argument
  • occ: fix problems with using structured values in a hook
  • occ: fix lcse bug: constants could be propagated too freely
  • occ: fix bugs with generating wrongly sized floating point constant values
  • occ: inline processing should not spill to memory as much
  • occ: don't inline functions that have try-catch blocks
  • occ: fix pointer aliasing problem with function arguments
  • occ: fix bug with the strength reduction (led to invalid GCSE in some cases)
  • occ: put temporary files in the current directory when TMP environment variable not set correctly
  • omake: rewrite the mechanism for handing out task slots
  • omake: use futures to improve the internal operations
  • omake: fix "-f -" to take input from stdin
  • omake: "-nolog" was exiting without displaying a reason for it
  • onm: read file in binary mode now...
  • oasm: simplify parser by using string processing instead of making an expression tree
  • ocpp: wasn't preprocessing C++ files
  • olink: if can't find a library, try prefixing the name with 'lib' (gcc compatibility)
  • olink: various improvements to map files
  • olink: create libraries on the fly when a DLL is specified on the command line
  • utilities: add support for switches that have optional arguments
  • utilities: bug fixes to command switch handling
  • utilities: rework make files for new omake behavior
  • rtl: fix rethrow_exception in case you want to throw outside a try block or from another thread
  • rtl: fix is_less()
  • rtl: fix fdim limits
  • rtl: fix erf limits
  • rtl: fix nexttoward and nextafter to work
  • rtl: remove stacked buffer from write() function as it interferes with DLL_PROCESS_DETACH
  • rtl: don't flush file buffers all the way to disk on program exit
  • rtl: noreturn should work on non-void functions
  • rtl: fixx std::terminate and std::unexpected to work properly
  • rtl: remove pstl
  • rtl: make_exception_ptr should work for both scalars and structures
  • rtl: protect runtime from exceptions that happen before it is fully initialized
  • rtl: lazy load the wctypes tables as a performance improvement;
  • rtl: fix bug where towlower actually did towupper
  • rtl: fix various header problems when running the libcxx tests
  • rtl: improve the stack trace on a crash
  • rtl: fix problem with dtoa not compiling properly
  • rtl: use mm_pause() instead of resorting to adding assembly language
  • rtl: fix bug where invalid input could crash strerror_s
  • rtl: tmpnam and friends, generate the file names randomly
  • rtl: fix fmemopen, left memory in an indeterminate state and didnt zero the buffer
  • documentation: document method for debugging without a debugger

Orange-C-v6.0.51.2

2 years ago

The major features in this release are:

  • add proper support for evaluating constexpr functions
  • finish 'algorithm' part of libcxx tests
  • support free embarcadero compiler
  • do some fixes for the VS2022 analyzer

additionally there were serveral bug fixes:

  • occ: perform function argument lookup for overloaded functions properly
  • occ: take out an ambiguous function reference when converting with a cast operator
  • occ: would crash when using an undefined symbol as a function return type
  • occ: fix some crashes
  • occ: handle difference between two return values better, when both values are template selectors
  • occ: when constructing a structured parameter, don't need to consider the const/volatile status of the original structure for purposes of parameter matching
  • occ: handle template argument matching when the function param is nullptr, a little better.
  • occ: allow conversions of integer types, while in nested template parsing
  • occ: clean up declval handling
  • occ: handle pointer/array matching in arguments a little better
  • occ: fix bug when using address of a templated function as an argument
  • occ: nonstatic member data can't be constexpr
  • occ: fix problem where a function was mis-marked as a specialization
  • occ: is_constructible and friends should return false, when the constructor is inaccessible
  • occ: fix various bugs when compiling std::min, std::max, and std::minmax
  • occ: fix various bugs with initializer_lists
  • occ: add gcc-style command line options for printing various compiler-related data
  • occ: add a custom hash function for use with backend function lookups
  • occ: change debug flag from /v to /g, /v gives version info
  • occ: use stdout for banner and version info
  • occ: void* and nullptr_t are different types for purposes of template substitution
  • occ: ignore -fPIC
  • occ: /w+ crashed the compiler
  • occ: add /Wall and /Wextra
  • occ: add some long-options compatibility with gnu make
  • occ: fix -M and add friends
  • occ: location of 'previous' definition is displayed with the duplicate definition error
  • occ: allow more customization in error list
  • occ: update to latest version of sqlite3, fix bugs when compiling it
  • occ: handle floating point match builtin guards for libcxx properly
  • occ: disambiguate pow() templates properly
  • occ: fix complex version of pow() template not to crash
  • occ: a = b() where b is a structure type should value-initialize a
  • occ: fix bug when generating rtti for structured return values
  • occ: fix crash when using a member function but forgetting the parenthesis
  • occ: fix bug where __unwrap_ref_decay would not work properly when used on multiple arguments of the same template function
  • occ: fix optimizer bug that caused excess code movement
  • orc: parse c-like types, enums, function prototypes
  • ocpp: add dependency generation
  • omake: allow ad-hoc specification of variables on the command line in addition to the current switches
  • rtl: fwrite, don't do divide on return if incoming size == 1 (speed optimization)
  • rtl: buffer stdout and stderr (speed optimization)
  • rtl: fix stdint.h include guards to work with C++
  • rtl: add CONSOLE_SCREEN_BUFFER_INFOEX
  • rtl: add sndAlias macro and fix some problems with the related macros
  • rtl: add various include guards to be compatible with other compilers, e.g. to sys/types.h
  • rtl: include mmsystem.h in windows.h
  • rtl: add _lseeki64 and _commit
  • appveyor: bump compiler up to VS2019
  • appveyor: fix appveyor build to fail more gracefully
  • appveyor: miscellaneous build cleanup
  • git rid of various dead code from the repository

Orange-C-v6.0.50.1

2 years ago

This version adds support for LIBCXX version 10, targeted for a C++14 compiler. It also expands the library functionality to include support for atomics and threading. And it adds support for some new C RTL functions.

a full list of changes follows:

  • various projects: fix various GCC warnings
  • various projects: add a diagnostic when an output file cannot be opened or created
  • various projects: convert ieee format to binary
  • various projects: if the command line help is too long, it will prompt you after each page
  • various projects: use unordered_map where possible, to speed things up
  • visual studio solution: make backends dependent on the programs they spawn
  • visual studio solution: update projects to VS2019
  • builds: remove duplicate rebuilds
  • builds: fix some problems with builds not erroring out properly on failure
  • occ: fix assembly language jmp [eax] to not truncate the register to word size
  • occ: fix bug in sign extension of negated unsigned short
  • occ: fix bug with not calling virtual destructors properly
  • occ: fix bug with not promoting default destructors to 'virtual' when needed
  • occ: fix bug with (double)aa = value sometimes not working properly, where 'aa' is a long long
  • occ: fix the code that enables the profiler
  • occ: enable 'inline' in the c++ headers (speedup applications)
  • occ: fix argument type lookup to work with enumeration constant in namespace
  • occ: add -LINK and -DLL command line switches (for autoconfig support)
  • occ: some internal optimizations in the source code
  • occ: fix fastcall calling convention to work with optimized code
  • occ: rewrite shared memory mapping handling to use less resources
  • occ: add __asm keyword (still supports 'asm')
  • occ: fix a case where there could be a crash if a structure is undefined
  • occ: destructor for union should not automatically delete objects defined in the union
  • occ: elide copy constructor references in certain initializations
  • occ: fix formatting on assembly language output files
  • occ: fix bug that prevented occ from working when compiled with CLANG version 10 or greater
  • occ: clean up errors (remove function reference)
  • occ: add 'referenced from' for references from higher templates
  • occ: clean up errors (fix mangling and unmangling)
  • occ: fix bug where packed arguments to a function wouldn't be fully expanded with qualifiers
  • occ: fix crashes when compiling in debug mode
  • occ: add #include_next
  • occ: sometimes the error for undefined variables would not appear
  • occ: rewrite the type alias functionality
  • occ: change padding in code segment to use nops
  • occ: fix some bugs in the name unmangling
  • occ: fix some problems with packed templates
  • occ: allow decltype to be used where a class selector could be used
  • occ: libcxx 10 support
  • occ: handle template instantion overloads where the only difference is the function return value
  • occ: clean up array access in for-range loops
  • occ: don't attempt to return a value when a template function's return type evaluates to void
  • occ: don't generate labels for inline function returns, unless absolutely needed (aids optimizations)
  • occ: the const qualifier should not be removed when evaluating a typedef
  • occ: fix bugs in auto deduction
  • occ: fix various problems with formatting, argument reference types
  • occ: don't generate const/ref member initializers error for a delegating constructor
  • occ: allow access to private constructors while generating default constructors
  • occ: handle conversion of rref to lref in function arguments properly
  • occ: don't generate an error when converting const lref to rref in function arguments
  • occ: require typename in a more standard way
  • occ: fix bugs with honoring member access specifiers
  • occ: fix some probelms with deleting default constructors
  • occ: arithmetic constants are rvalues for purposes of argument deduction
  • occ: refactor how memory allocation is done to clean up code base
  • occ: convert constants to boolean correctly
  • occ: add error if function body is redefined
  • occ: update the attribute parsing
  • occ: unique_ptr didn't compile when passing free() for the destruction function
  • occ: fix randomly occurring 'unknown suffix' errors
  • occ: fixes to typeinfo
  • occ: fix static assert to work within structures
  • occ: fix static_assert error to be more obvious, add C++17 version of static_assert
  • occ: don't reserve space for static const integral members of structures
  • occ: fix variable size arrays to convert to char* properly
  • occ: int and long are same (on x86) for purposes of argument deduction. Exact match is still prefered.
  • occ: bool was sometimes considered the same as char
  • occ: fix crash when initializing bool with a function address (should result in true)
  • occ: allow forward declaration of a non-member class, within a class
  • occ: allow _atomic in C++ mode, add new atomic intrinsics
  • occ: handle problems where the evaluation of template selectors didn't happen in a timely way
  • occ: clean up is_constructible and is_nothrow_constructible
  • occ: add some intrincs to help compiling tuples
  • occ: fix problems evaluating sfinae
  • occ: add display of timing information
  • occ: add some new command line switches
  • occ: clean up what happens when running occparse directly
  • occ: fix some problems with initializer lists
  • occ: fix some problems with poiinters to member functions
  • occ: fix rare bug where sometimes a function call would not be treated as a call
  • occ: fix problem an optimization of a pointer to an array would not allocate auto variables properly
  • occ: fix problems with finding an overload match for a nullptr_t argument
  • occ: fix bug where cast conversions combined with inlining could generate bad code
  • occ: rewrite the expression rebalancing operation to operate in real time
  • occ: fix bug with code generation for long long math
  • occ: fix some problems with extraneous extern statements in the assembly language output files
  • occ: changes to how inlining is done
  • occ: internal improvements for memory usage while compiling
  • occ: fix code completion compiler
  • occ: prefer conversion of wchar_t to char to a widening conversion, in function argument matching
  • occ: remove code generation of some unnecessary calls to empty constructors
  • occ: converting enum to long long generated bad code
  • occ: use native ints instead of long longs, for integers within the optimizer code
  • occ: support __attributed((aligned)) without specifying an alignment
  • occ: static operator new/delete can be members of a class
  • occ: fix bug surrounding VARARGS processing
  • occ: fix a bug where namespace usage could result in an infinite loop
  • occ: support for-range where the range specifier is an explicit initializer list
  • occ: add support for parsing attribute((format)) but not its functionality
  • occ: trying to scope an unnamed enum resulted in a compiler error
  • occ: when a member using statement specifies a base class, the constructures were not pulled in.
  • occ: fix bug in implicit lambda capture of 'this'
  • occ: allow access to base classes of a member function's class, from within a lambda
  • occ: allow conversion to a base class, when returning a structure
  • occ: internal modification, change unwieldy macros to constexpr functions
  • occ: fix some problems with overloading methods that have enums as arguments
  • occ: add attribute((internal_linkage))
  • occ: add attribute((exclude_from_explicit_instantiation))
  • occ: 'far' keyword not handling properly during code generation
  • occ: fix bugs with initializing a lambda function at the global level
  • occ: constexpr constructors were being duplicated in the output files
  • occ: better resolution for overload matching of mismatched qualifiers
  • occ: allow __stdcall to work with templated functions
  • occ: fix bug where simple structure with member initializers wouldn't construct properly
  • occ: fix problem with overloading cast operators that only differ by qualifiers
  • occ: fix bugs in code generation for atomics
  • occ: add new atomic intrinsics, overhaul the atomic headers
  • occ: fix generation of debug info
  • occ: fix problem with simple structures having member initializers not getting initialized
  • occ: fix problem where a container with a structured initializer list wouldn't initialize
  • occ: fix bug in peephole optimization
  • occ: fix the gcse optimizer to work again, fix various bugs in aliasing
  • occ: add -std=xxx, -x, -nostdinc, -nostdinc++, -fsyntax-only to the command line
  • occ: fix STDC_VERSION for C89
  • occ: allow dots in the file name specified on the command line (before the extension)
  • occ: handle volatiles better
  • occ: handle FILE preprocessor macro better in the presence of backslashes
  • occ: handle wchar_t better in the code generator
  • occ: allow conversions from pointer to bool
  • occ: fix various problems with specifying multiple input files on the command line
  • occil: various improvements to allow generated code to be decompiled
  • occil: add runtime support for function pointer via delegate
  • occil: fix bug in pinning
  • olib: add --noexports switch to remove exports while importing to library
  • ieeeconvert: new project for converting binary object files to more readable ascii format
  • utilites: some code cleanup
  • netlib: add support for generic classes and functions
  • netlib: add support for pinning
  • netlib: various small improvements
  • netlib: cache namespaces and classes while loading to speed up the load
  • netlib: add some improvements for GCC compiles, and MONO support
  • adl compiler: improvements and documentation
  • rtl: libcxx 10 support, atomic support, threads support
  • rtl: add flockfile and friends
  • rtl: add fmemopen and friends
  • rtl: add rpmalloc allocator and remove lea allocator
  • rtl: rename 'asm' keyword to '__asm' throughout
  • rtl: update makefiles for clang-format and format most of the runtime library
  • rtl: fix various issues with C11 threading and mutexes
  • rtl: putmkdir and friends in right header
  • rtl: add getopt implementation
  • rtl: rewrite C language headers to check for RC_INVOKED
  • rtl: fix crash in flushall
  • rtl: fix complex.h
  • rtl: newlocal() is inline now and other locale() updates for libcxx 10
  • rtl: copy header files to main include directory during a build, remove explict include directories from build command line
  • rtl: rename _DS and friends to allow compiling of filesystem header
  • rtl: add fseeko and ftello
  • rtl: fix bug in sscanf, using %c multiple times didn't work.
  • rtl: use VirtualAlloc in the memory manager
  • rtl: add various unwind functions to the dll export definitions file
  • rtl: add standardize exception handling support
  • rtl: add constructors/destructors for objects in thread local storage
  • rtl: add strerror_s and _strerror_s and errno_t
  • rtl: add enough support for fibersapi to allow libcxx10 threading to compile
  • rtl: fix some alignment issues in the WIN32 headers
  • rtl: only need one tls index, not one per thread
  • rtl: send output of 'assert' to console for console mode programs
  • rtl: fix bug in math.h, could include C++ headers with the wrong structure alignment
  • tests: run what we can in parallel
  • tests: complete libcxx tests on atomics

Orange-C-v6.0.45.1

4 years ago

This release finished the milestone started in release 6.0.44.1, by rounding out the work with compiling MPFR, and fixing other miscellaneous bugs.

  • occ: functions ending in a function call for a function tagged as 'noreturn' will not generate a 'needs return value' warning.
  • occ: fix bug where destructs called after an if statement could be called at the wrong time.
  • occ: implement better error diagnostics (not used yet)
  • occ: fix bug where 'using namespace xxx;' was used inside a function might not work properly
  • occ: comment marker inside a preprocessor continuation for a string wasn't ignored
  • occ: change default extension for generated assembly language files to .S
  • occ: add /a switch for specifying extension of assembly language files
  • occ: fix bug where lambdas generated at global scope created invalid assembly language output (object files were fine)
  • occ: when assigning a string or other struct to itself with a hook, invalid code was generated.
  • occ: attribute names which are keywords are now compiled correctly
  • occ: i*i could be evaluated incorrectly due to a bug in the backend
  • occ: fix bug in global optimizer: under rare conditions it could generate bad code.
  • occ: fix comparison involving NANs to return false (!= returns true)
  • occ: fix definition of FLT_MAX, DBL_MAX, LDBL_MAX to be correct
  • occ: fix i%1 to return 0 instead of i, fix bugs and improve code generation for i%# where # is 1 or a power of 2
  • occ: when calculating compile-time constants, -1.0/0.0 incorrectly resulted in +infinity (was good when calculated at runtime)
  • occ/ocpp: add #line statements to the preprocessed output
  • ogrep: add -q option to make it quiet...*

Orange-C-v6.0.44.2

4 years ago

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.