# Compiler Release Notes

## Compiler 4.1

### Fixed errors and malfunctions

- Fixed problem in optimizing of case patterns containing tuples.
  (Own Id: OTP-3973)
  (Aux Id: Seq 5243, Seq 7025)

- Using the 'not' operator in guards could crash the emulator.
  (Own Id: OTP-4194)
  (Aux Id: seq7196, seq7232, seq7253)

- A bug in the compilation of bit syntax matching could cause parts of the binary to be skipped.
  (Own Id: OTP-4219)
  (Aux Id: seq7218)

### Improvements and new features

- The documentation for the 'compile' module now lists several options that were previously undocumented or only documented in the 'erl_lint' documentation (such as the highly useful `warn_unused_vars`).
  (Own Id: OTP-4240)

- The `-include` and `-include_dir` directives substitute environment variable values for first path components beginning with a `$` (dollar) sign.
  (Own Id: OTP-4385)
  (Aux Id: seq7349)

- The endianess specification 'native' has been added to the bit syntax. It will resolve to either big or little endian at load time. It is specially useful for communcating with linked-in drivers.
  (Own Id: OTP-4458)

- 'try' and 'cond' are keywords in R9 and must not be used as atom names or field names in records (unless they are single-quoted). In the R9 release, the compiler options 'disable_try' and 'disable_cond' can be used to allow 'try' and 'cond' to be used as in previous releases (to allow compilation of old Erlang code).
  The 'disable_try'/'disable_cond' options will be removed in the R10 release.
  (*** POTENTIAL INCOMPATIBILITY ***)
  (Own Id: OTP-4464)

There are also release notes for older versions.