Skip to content

CompCert 3.4

Compare
Choose a tag to compare
@xavierleroy xavierleroy released this 17 Sep 07:32
· 705 commits to master since this release

Release 3.4, 2018-09-17

Bug fixing:

  • Redefinition of a typedef in a different scope was wrongly rejected.
  • Attach _Alignas(N) and __attribute((aligned(N))) to names instead of types, so that _Alignas(16) int * p means "16-aligned pointer to int", not "pointer to 16-aligned int".
  • For packed structs, fix a discrepancy between the size and alignment computed during elaboration and those computed by the verified front-end after expansion.
  • Honor qualified array types in function parameters: if a parameter is declared as e.g. int t[const 4], it is now treated as int * const t in the function body, not int * t like before.
  • Reject __builtin_offsetof(struct s, f) if f is a bit-field.
  • Wrong parsing of attributes having multiple arguments such as __attribute((packed(A,B,C))).
  • If __builtin_ais_annot is followed immediately by a label (e.g. a loop head), add a nop instruction to separate the annotation from the label.
  • Wrong parsing of the command-line options -u <symbol> and -iquote.
  • PowerPC in hybrid 32/64 bit mode: reject %Q and %R register specifications in inline assembly code, since 64-bit integer arguments are not split in two registers.
  • x86 64-bit mode: wrong expansion of __builtin_clzl and __builtin_ctzl (issue #127).

New checks for ISO C conformance:

  • Removed support for _Alignof(expr), which is not C11; only _Alignof(ty) is part of C11.
  • Reject occurrences of _Alignas in places that are not allowed by C11, e.g. in typedef. __attribute((aligned(N))) can be used instead.
  • Reject occurrences of restrict in places that are not allowed by C99 and C11.
  • Reject structs composed of a single flexible array struct { ty []; }.
  • Check that qualified array types such as int t[const 4] occur only as function parameters, but nowhere else.
  • In function definitions, reject function parameters that have no names.

New warnings:

  • Warn for flexible array types ty[] in places where they do not make sense.
  • Warn for inline (not static inline) functions that declare non-constant static variables.
  • Optionally warn if the alignment of an object is reduced below its natural alignment because of a _Alignas qualifier or an aligned attribute, or a packed attribute.
  • Warn for tentative static definitions with an incomplete type, e.g. static int x[];.
  • The warning about uses of C11 features is now off by default.

Semantic preservation proof:

  • Model the fact that external functions can destroy caller-save registers and Outgoing stack slots; adapt the proofs accordingly.

Coq and OCaml development:

  • Support Coq versions 8.8.1 and 8.8.2.
  • Support OCaml versions 4.7.0 and up.
  • Support Menhir versions 20180530 and up.

Others:

  • Improved error handling in "configure" script (issue #244)
  • clightgen adds configuration information to the generated .v file (issue #226)