aboutsummaryrefslogtreecommitdiffstats
path: root/Changelog
diff options
context:
space:
mode:
Diffstat (limited to 'Changelog')
-rw-r--r--Changelog137
1 files changed, 137 insertions, 0 deletions
diff --git a/Changelog b/Changelog
index 552122e0..fda9417e 100644
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,140 @@
+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)
+
+
+
+Release 3.3, 2018-05-30
+=======================
+
+New features:
+- Introduced the __builtin_ais_annot built-in function to communicate
+ source-level annotations to AbsInt's a3 tool suite via a special
+ section in object and executable files.
+- Improved C11 support: define the C11 conditional feature macros;
+ define the max_align_t type in stddef.h.
+- PowerPC 64-bit port: new built-in functions for 64-bit load-store with
+ byte reversal and for 64-bit integer multiply high.
+- x86 64 bits: add support for BSD.
+
+Bug fixing:
+- Wrong code generated for unions containing several bit fields.
+- Internal compiler errors for some initializers for structs and
+ unions containing bit-fields, and for anonymous members of unions.
+- Missing error reporting for <integer> - <ptr> subtraction,
+ causing an internal retyping error later during compilation.
+- String literals are l-values.
+- String literals have array types, not pointer types.
+- Array sizes >= 2^32 were handled incorrectly on 64-bit platforms.
+- Wrong code generated for global variables of size 2^31 bytes or more.
+- struct and union arguments to annotation builtins must be passed by
+ reference, regardless of the ABI calling conventions.
+- "e1, e2" has pointer type if "e2" has array type.
+- x86 64 bits: in "symbol + ofs" addressing modes, the offset "ofs"
+ must be limited to [-2^24, 2^24) otherwise linking can fail.
+
+New or improved diagnostics (errors and warnings):
+- Warn for comparison of a pointer to a complete type and a pointer to
+ an incomplete type.
+- More checks on variables declared in "for" loops: not static, not
+ extern, not function types.
+- Reject empty declarations in K&R functions.
+- Reject arrays of incomplete types.
+- Reject duplicate 'case' or 'default' statements within a 'switch'.
+- Reject 'case' and 'default' statements outside a 'switch'.
+- Check that 'typedef' declares a name and doesn't contain '_Noreturn'.
+- Function parameters are in the same scope as function local variables.
+- More comprehensive constant-ness checks for initializers of global
+ or static local variables.
+- Make sure an enum cannot have the same tag as a struct or an union.
+- More checks on where the 'auto' storage class can be used.
+- Accept empty enum declaration after nonempty enum definition.
+- Reject pointers to incomplete types in ptr - ptr subtraction.
+- When defining a function, take attributes (_Noreturn, etc) from
+ earlier declarations of the function into account.
+- Better check for multiple definitions of functions or global variables.
+- Reject illegal initializations of aggregates such as "char c[4] = 42;".
+- Reject designated initializers where a member of a composite type is
+ re-initialized after the composite has been initialized as a whole.
+- Reject casts to struct/union types.
+- Reject sizeof(e) where e designates a bit-field member of a struct or union.
+- "e1, e2" is not a compile-time constant expression even if e1 and e2 are.
+- "main" function must not be "inline"
+- Warn for functions declared extern after having been defined.
+- Warn for function declarations after function definitions when the
+ declaration has more attributes than the definition.
+- Warn for assignment of a volatile struct to a non-volatile struct.
+- Warn for "main" function if declared _Noreturn.
+
+Coq development:
+- Added support for Coq versions 8.7.2 and 8.8.0.
+- Rewrote "Implicit Arguments" and "Require" inside sections,
+ these are obsolete in 8.8.0.
+- Upgraded Flocq to version 2.6.1.
+- Optionally install the .vo files for reuse by other projects
+ (options -install-coqdev and -coqdevdir to configure script;
+ automatically selected if option -clightgen is given).
+
+
Release 3.2, 2018-01-15
=======================