github AbsInt/CompCert v2.5
CompCert 2.5

latest releases: v3.14, v3.13.1, v3.13...
9 years ago

Release 2.5, 2015-06-12

Language features:

  • Extended inline assembly in the style of GCC. (See section 6.5
    of the user's manual.) The implementation is not as complete
    as that of GCC or Clang. In particular, the only constraints
    supported over operands are "r" (register), "m" (memory), and
    "i" (integer immediate).

Code generation and optimization:

  • Revised translation of '||' and '&&' to Clight so as to
    produce well-typed Clight code.
  • More prudent value analysis of uninitialized declarations of
    "const" global variables.
  • Revised handling of "common" global declarations, fixes an issue
    with uninitialized declarations of "const" global variables.

Improvements in confidence:

  • Formalized the typing rules for CompCert C in Coq and verified
    a type-checker, which is used to produce the type annotations
    in CompCert C ASTs, rather than trusting the types produced by
    the Elab pass.
  • Coq proof of correctness for the Unusedglob pass (elimination
    of unreferenced static global definitions). The Coq AST for
    compilation units now records which globals are static.
  • More careful semantics of comparisons between a non-null pointer
    and the null pointer. The comparison is undefined if the non-null
    pointer is out of bounds.

Usability:

  • Generation of DWARF v2 debugging information in "-g" mode.
    The information describes C types, global variables, functions,
    but not yet function-local variables. This is currently available
    only for the PowerPC/Diab target.
  • Added command-line options to turn individual optimizations on or off,
    and a "-O0" option to turn them all off.
  • Revised handling of arguments to __builtin_annot so that no code
    is generated for an argument that is a global variable or a local
    variable whose address is taken.
  • In string and character literals, treat illegal escape sequences
    (e.g. "%" or "\0") as an error instead of a warning.
  • Warn if floating-point literals overflow or underflow when converted
    to FP numbers.
  • In "-g -S" mode, annotate the generated .s file with comments
    containing the C source code.
  • Recognize and accept more of GCC's alternate keywords, e.g. signed,
    __volatile
    , etc.
  • cchecklink: added option "-files-from" to read .sdump file names
    from a file or from standard input.

ABI conformance:

  • Improved ABI conformance for passing values of struct or union types
    as function arguments or results. Full conformance is achieved on
    IA32/ELF, IA32/MacOSX, PowerPC/EABI, PowerPC/Linux, and ARM/EABI.
  • Support the "va_arg" macro from <stdarg.h> in the case of arguments
    of struct or union types.

Coq development:

  • In the CompCert C and Clight ASTs, struct and union types are now
    represented by name instead of by structure. A separate environment
    maps these names to struct/union definitions. This avoids
    bad algorithmic complexity of operations over structural types.
  • Introduce symbol environments (type Senv.t) as a restricted view on
    global environments (type Genv.t).
  • Upgraded the Flocq library to version 2.4.0.

Bug fixing:

  • Issue #4: exponential behaviors with deeply-nested struct types.
  • Issue #6: mismatch on the definition of wchar_t
  • Issue #10: definition of composite type missing from the environment.
  • Issue #13: improved handling of wide string literals
  • Issue #15: variable-argument functions are not eligible for inlining.
  • Issue #19: support empty "switch" statements
  • Issue #20: ABI incompatibility wrt struct passing on IA32.
  • Issue #28: missing type decay in __builtin_memcpy_aligned applied to arrays.
  • Issue #42: emit error if "static" definition follows non-"static" declaration.
  • Issue #44: OSX assembler does not recognize ".global" directive.
  • Protect against redefinition of the __i64_xxx helper library functions.
  • Revised handling of nonstandard attributes in C type compatibility check.
  • Emit an error on "preprocessing numbers" that are invalid numerical literals.
  • Added missing check for static redefinition following a non-static
    declaration.
  • Added missing check for redefinition of a typedef as an ordinary
    identifier within the same scope.

Miscellaneous:

  • When preprocessing with gcc or clang, use "-std=c99" mode to force
    C99 conformance.
  • Use a Makefile instead of ocamlbuild to compile the OCaml code.

Don't miss a new CompCert release

NewReleases is sending notifications on new releases.