Skip to content

Releases: LADSoft/OrangeC

Nightly

19 May 21:55
Compare
Choose a tag to compare
Nightly Pre-release
Pre-release

Changes to compiler since the September 23rd, 2023 release.

Well this isn't really a nightly build... to avoid racking up minutes we are only building when something changes. Should be close enough.

Release Notes

We are heading for the 7.0.0 release. The major features in this release will be support for c++17 and support for building .NET core images with occil. Implementation is done for both features and the functionality is there, the major holdup as far as a release goes is to finish testing the c++17 changes.

Here is the list of all the changes that have been made since the last release:

fixes #1020, remove ocide links from install script.   Also adds support for latest occil and adds examples to the install directory
update .gitignore, src/dosxclude.lst
adjust the occil tests for compiler not adding .C extention any more
Add capability to figure out an object file has a bad format to objlib
handle . characters in filename, don't add .c extension automatically, pass files with extensions we don't recognize on to the linker
add ifdef to output one ICF file per input file, ifdef out an MSIL function call
compile OCC with c++14 when using OCC to compile
Merge pull request #1029 from rochus-keller/busy_frontend : Minimal Linux implementation of SharedMemory and fixes to make     ifdef'ed DIR_SEP and PATH_SEP with TARGET_OS_WINDOWS
fixes #1028, *(0,(struct nn *)b) is an lvalue for assignment purposes, rename some enumerations
no / options on Linux; minimal SharedMemory imp (non-sharing); orangefront seems to work now
Rework to make compiler/optimizer frontend build on MSVC 2015, Clang 4 and GCC 12
Rework occil to support code generation for .net core 6.0 and later
search GAC for system dlls before searching path; don't compile libhostfxr on linux; fix a typo
fix; build with GCC 10 on x64
fixes #966, occil optimize locals better, generate CONSOLE apps by default
code rewrite, remove 'enum' keyword when possible and ifdef out constexpr when compiling for MSVC15.0
remove qualifier from references to std::tolower (MSVC15.0 support)
fix global unions and implement them at function scope; a few bug fixes
call class cast operators more often
resolve functions as function args before doing type checking
fix a couple of use cases where 'const' does not get added to an auto type
allow parenthesis when specifying a string constant during initialization of a string array
fix compile warning on mingw64
fix 'raw' string parsing
fix a crash
'hook' operator should resolve c++ functions
add _TRUNCATE macro
properly const qualify arguments to wcsicmp and friends
Merge pull request #1023 from chasonr/zrdx-doc | Add converted and translated versions of zrdx.txt
fixes #1025, crash when compiling lua 5.4.4
adjust tests for compiler floating point bug fix
fix floating point truncate, was looking at the LSB instead of one past the LSB
Merge pull request #1022 from GitMensch/patch-2 | Update occil.md, textual and formatting changes
refactor template.cpp into four files
bug fixes while building library/tests/applications
fix bug where lambda structures could have a zero length
make compiler adjustments to compile libcpp with c++17 settings
lambda functions: bug fixes to captured 'this' handling
lambda functions: add captured *this
lambda functions: add new error messages
Merge pull request #969 from GitMensch/patch-1 | Update OCC.md : 
#147, comparisons for exception specifier part of type
fix bug with duplicate structure member
add feature checking
update some diagnostics to work properly
 #147 add inline variables
 #147 template class deduction
 also clean up enumerations related to the template structures (don't
 reuse KEYWORD enumerations)
fix a problem with error messages not being specified correctly
cgamma: cimag(x) was used as an lvalue
#147, copy elision and better handling for warnings about explicit constructors
fix some problems with debug line information
#147 declaration in if and switch stmt
 #147 add structured binding
bug fixes to integer template args
#147 add variadic folding
temporary fix to make TT_DECLARE compile in all compilers
#147, rework expression parsing in preparation for adding variadic template folding
#147 add 'if constexpr(...)'
#147, add 'auto' as a non-type template paramater
fixes #955, bugs found when compiling the latest sqlite amalgamate with occil
add __restrict keyword
speed up the lazy optimizer a bit
fix bug that led to builds failing randomly
add MEM_RESERVE flag to virtualalloc allocation
don't use top-down allocation with virtualalloc
merge C23 support to main line
fix some problems with range-based for when the range is a braced initializer list, fix some other C++17 changes

Orange C-v6.73.1

23 Sep 18:39
Compare
Choose a tag to compare

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

18 Sep 02:50
Compare
Choose a tag to compare

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-v6.0.71.1

11 Aug 22:00
Compare
Choose a tag to compare

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

25 Jun 05:37
Compare
Choose a tag to compare

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

Orange C-v6.0.62.2

18 Feb 15:37
Compare
Choose a tag to compare

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

09 Sep 02:41
Compare
Choose a tag to compare

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

22 Nov 18:46
Compare
Choose a tag to compare

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

16 Jul 02:07
Compare
Choose a tag to compare

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: up...
Read more

Orange C-v6.0.45.1

17 May 23:11
Compare
Choose a tag to compare

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...*