Fail-Safe C: Revision History

Revision History Summary

Revision 2261

  • 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. Major changes:

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

Revision 2221

  • fixed broken type handling for &&.

Revision 2220

  • fixed: required get_real_offset helper methods were sometimes not generated.

Revision 2100

  • improved error messages on memory exhaust situations.

Revision 2099

  • bug fix: linking utimes was sometimes failed.

Revision 2076

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

Revision 1797

  • fix-up in Debian packaging: ec will be inside /usr/lib/fsc, not /usr/bin.

Revision 1795

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

Revision 1774

  • Added support handling of 1st-class struct arguments and return values (bug #4, #lepidum-114).
  • A few more bug fixes.

Revision 1773

  • Support for OCaml 3.0.11 and Debian sid/lenny.

Revision 1750

  • Fixed: offset calculation of consecutive bitfields.
  • Fixed: realloc for blocks with an additional base storage.
  • Fixed: Initialization of const integers using ?: operator.

Revision 1739

  • Reduced compiler warnings on build.

Revision 1737

  • Fixed: fscc script failed when memory use limit was already set to lower than 256MB.

Revision 1736

  • Regression fix: “fscc --help” did not work at r1735.

Revision 1735

Version 1.0.1.

  • Support for building local Debian packages.

Revision 1732

  • Internal improvements for build/compiler systems.
  • Loosened copyright terms for some OCaml source files (common libraries independent from the FSC compiler).

Revision 1720

Library bug fixes:

  • Locally set environment variables are correctly reflected to library functions of the same process.

Revision 1713


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

Revision 1691

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.

Revision 1668

Library bug fixes. (several tests failed for scanf)

Revision 1662

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.

Revision 1650

Ocamldoc documentation comments are added.

Revision 1649

Bug fixes.

Revision 1648

OCamlMakefile updated to a recent version.

Revision 1631

Bug fixes.

  • invalid code generated for initialization of arrays inside structs.
  • Empty argument specifications in function definitions must be handled as if it were void.

Revision 1619

Bug fixes.

  • single-precision float constants without exact decimal representation was broken.

Revision 1616

Bug fixes:

  • Invalid value generated for single-precision floating constants.

Revision 1613

Bug fixes:

  • Some library functions failed with null string argument.

Revision 1608

Bug fixes:

  • Wrong pointer generated with some special cases regarding unalinged pointer accesses.

Revision 1605


  • Implemented new-style backtrace display using GDB.

Bug fixes:

  • Handling of structs used as an r-value.
  • Some compatibility issue related with bzero().

Revision 1601

Bug fixes:

  • Local auto structs initialization with single struct expressions.

Revision 1596

Bug fixes;

  • isascii() is defined for whole int range.

Revision 1593

Bug fixes:

  • several K&R declaration typing bugs (some of those reported by Yusuke Endoh.)

Revision 1591

Bug fixes:

  • unaligned word access overwrapping to the final incomplete word.

Revision 1587

Bug fixes:

  • broken handling of function arguments with struct types.

Revision 1583


  • (unsupported) -fuse-c99-comment option added.

Bug fixes:

  • regression bug for rev 1577.

Revision 1577

Bug fixes:

  • regression of r1569.
  • type merge failed when both args are null constant.

Revision 1572

Bug fixes:

  • Function ret-type hint was not correctly generated for function pointer invocation.

Revision 1571


  • changed interpretation of ISO specification for arrays/functions in conditions.

Revision 1569

Bug fixes:

  • fixed invalid reverse ssa transformation when branch target is the next block (reported by Yusuke Endoh).
  • fixed ssa transformation lockup (reported by Yusuke Endoh).

Revision 1566

  • fix needless C99 (or GCC) dialect.


  • added -fno-polymorphic-analysis option.
  • short-circuit semantics for cast of pointers of continuous types.
  • char **environ.

Bug fixes:

  • 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).

Revision 1557

Implemented return-type analysis for polymorphic functions.

Bug fixes:

  • regression: compilation failure on polymorphic functions with struct-related parameters (e.g. a pointer to a struct)

Revision 1550

  • README: a small descriptive text file added.

Revision 1547

First public revision.