Now function overloading with ref and non-ref parameter is legal for struct type
Issue 5889 - Struct literal/construction should be rvalue
Issue 4174 - Template interface functions not allowed, making operator overloads difficult

The lifting restriction banning final and static members in interfaces should also apply to template functions.
Issue 4958 - Floating point enums should check for total loss of precision

This is Don's fix from the bug report.  Issue an error if last+1 == last when assigning values to enum members.
Issue 4241 - duplicate union initialization error doesn't give a file location

Always pass a location to Type->defaultInitLiteral()
Issue 783 - Cannot use an array w/ const or variable index as new[] size argument.

The length is first parsed as an associate array type, so it needs to be reinterpreted as an expression.
Issue 3927 - array.length++; is an error, but ++array.length compiles

Rewrite array.length to (auto tmp = array.length, ++array.length, tmp)
Issue 3812 - Missing line number for implicit cast of variadic function to array

The interpreter drops the loc when interpreting a function call, so restore it.
Refactor XxxAssignExp semantic

Reduce code duplication for the semantic routines of `+=`, `-=`, `*=`, `/=`, `%=`, `&=`, `|=`, `^=`, `<<=`, `>>=`, `>>>=`

Most of the remaining special casing is due to imaginary and complex types.

In the process fix issues 7439 and 5181.
Fixes bug 7452.

This commit avoids inferring @safe when a child function type checks
the ancestor's isSafe() when inference is still in progress.
Added test case for bug 6332.

Strangely this change also fixes bug 6332. See also #544.
Issue 3559 - DMD 1.048+ fails to take function pointer from overloaded member functions

Properly search for the correct overload instead of returning the wrong function.
Fixes bug 435: Constructors should be templatized

Basically just applying Shin Fujishiro's patch, with some test cases.
Issue 3822 - Invalid optimization of alloca called with constant size

e2ir.c constains an optimization to turn alloca into a fixed sized array allocation on the stack when alloca is called with a compile-time constant.  This is invalid as alloca may be called inside a loop.
Issue 6685 - Allow using "with" with rvalues

When using 'with' with an rvalue, use a tempoary variable.  The compiler is doing this anyway and making it explicity allows taking it's address and using it within the 'with' scope.
Issue 4536 - Typetuples (T...) should have an .init member

Transform TT!(T, U, V, ...).init to TT!(T.init, U.init, V.init, ...)
Fix bug 7504: Cannot assign an object of type 'typeof(null)' to an array

Added a special case in e2ir.c to handle the Tnull → Tarray casting.
Refactor isSpeculativeFunction into Dsymbol

It is actually valid for any symbol, not just function declarations.
Add global.speculativeGag

So that we can distinguish is(typeof()) gagging from forward reference
gagging.
Fix bug 7399: Broken import statement in trySemantic() causes silent compiler error

This patch is a hack. It make `Module::read()` not to call `fatal()`
when the system is gagging, and make `Module::load()` return NULL when
read failed. Some null-checks are introduced in several other places as
a result.

Proper fix would require exceptions be enabled (by using a `throw`
statement instead of `exit(EXIT_FAILURE)`) and incorporate RAII, which
would be too difficult to change at this stage.