Fail-Safe C: Revision History
Revision History Summary
* bug fix: environment check was not handled correctly.
* bug fix: some conditional expressions failed to compile.
* Internal optimizations on output source code.
* Internal improvement for dangling if handling.
Revision 2252 (version 2.0.0~rc1)
Release Candidate for version 2.0.0.
* support for x86-64 architecture.
* true support for long double type.
* improved error handlings.
* slightly improved signal handling.
* major internal refactoring and reimplementation.
* bug fixes.
- fixed broken type handling for &&.
- fixed: required get_real_offset helper methods were sometimes not generated.
- improved error messages on memory exhaust situations.
- bug fix: linking utimes was sometimes failed.
- bug fix on reading a short from unaligned offsets.
Revision 2065 (version 1.6.0)
Major visible changes:
- New linker information format with more attributes.
- Support for multiple uninitialized non-extern global variables.
- Improved linking of back-end native libraries.
- Better handling for standard C library functions.
- Small improvement on runtime boundary checking.
- Improvement on link-time type unifications.
- Propagation of source line numbers.
- Added library functions for low-level memory managements.
Major internal changes:
- Introduction of a new intermediate language in code generator sections.
- Reorganization of compile-time auto configuration.
- fix-up in Debian packaging: ec will be inside /usr/lib/fsc, not /usr/bin.
- License condition updated. (make it more liberal)
- Support for ARM, MIPS architectures.
- Support for cross building environments.
- Configure script introduced.
- Improvements and Fixes
- Support for Debian lenny release.
- Partial support for C99 comments and hex floating constants.
- Fixed parser's bug on complex and tricky declaration with typedefs.
- Added support handling of 1st-class struct arguments and return values (bug #4, #lepidum-114).
- A few more bug fixes.
- Support for OCaml 3.0.11 and Debian sid/lenny.
- Fixed: offset calculation of consecutive bitfields.
- Fixed: realloc for blocks with an additional base storage.
- Fixed: Initialization of const integers using ?: operator.
- Reduced compiler warnings on build.
- Fixed: fscc script failed when memory use limit was already set to lower than 256MB.
- Regression fix: "fscc --help" did not work at r1735.
- Support for building local Debian packages.
- Internal improvements for build/compiler systems.
- Loosened copyright terms for some OCaml source files (common libraries independent from the FSC compiler).
Library bug fixes:
- Locally set environment variables are correctly reflected to library functions of the same process.
- Better handling of local variables allocated in heap: it is now marked as deallocated after function exit.
- Support for __fsc_attribute__((noreturn)) attribute.
Library bug fixes:
- strxfrm: wrong boundary check condition.
- getenv: access fault trap should be raised on NULL pointers.
- termios: clear padding fields by zeros for paranoid.
- exec*: should use FSC-side environ.
- Avoid compiler warnings during stdlib build.
Compiler bug fixes:
- Merging extension attributes of struct declarations (bug #6, #lepidum-53).
- Fixed handling of pointer arithmetics in constant expressions.
Library bug fixes.
- Cannot copy jmpbuf as defined in C99.
- "insecure mktemp() used" warning is shown without using mktemp().
Introduced a 256MB memory-usage limit for backend GCC, to avoid system memory starvation.
Library bug fixes. (several tests failed for scanf)
Release 1, Version 1.0.0.
Merging more library functions.
Tentative implementation of wrapper generator (fscw).
Directory structure changed.
- Revision 1660, 1661 had missing files. Fixed in r1662.
Ocamldoc documentation comments are added.
OCamlMakefile updated to a recent version.
- invalid code generated for initialization of arrays inside structs.
- Empty argument specifications in function definitions must be handled as if it were void.
- single-precision float constants without exact decimal representation was broken.
- Invalid value generated for single-precision floating constants.
- Some library functions failed with null string argument.
- Wrong pointer generated with some special cases regarding unalinged pointer accesses.
- Implemented new-style backtrace display using GDB.
- Handling of structs used as an r-value.
- Some compatibility issue related with bzero().
- Local auto structs initialization with single struct expressions.
- isascii() is defined for whole int range.
- several K&R declaration typing bugs (some of those reported by Yusuke Endoh.)
- unaligned word access overwrapping to the final incomplete word.
- broken handling of function arguments with struct types.
- (unsupported) -fuse-c99-comment option added.
- regression bug for rev 1577.
- regression of r1569.
- type merge failed when both args are null constant.
- Function ret-type hint was not correctly generated for function pointer invocation.
- changed interpretation of ISO specification for arrays/functions in conditions.
- fixed invalid reverse ssa transformation when branch target is the next block (reported by Yusuke Endoh).
- fixed ssa transformation lockup (reported by Yusuke Endoh).
- fix needless C99 (or GCC) dialect.
- added -fno-polymorphic-analysis option.
- short-circuit semantics for cast of pointers of continuous types.
- char **environ.
- put parentheses around and-expressions in or-expressions (like "(a && b) || c") to avoid gcc warnings.
- memmove use short-cut copy only when continuous blocks are "clean" (no additional-bases).
Implemented return-type analysis for polymorphic functions.
- regression: compilation failure on polymorphic functions with struct-related parameters (e.g. a pointer to a struct)
- README: a small descriptive text file added.
First public revision.