Don't map Extended_Ptr to Double_Ptr for MSVC targets with 64-bit reals.
Instead, map reals to Double_Ptr directly, thereby still allowing to
work with 80-bit extended precision values via `extended ptr`.
DMD 2.079 introduces this breaking ABI change. Just like on 32-bit OSX,
the mangled names of D symbols now include the platform-specific
underscore prefix.
Biggest changes:
* idgen.d has been replaced by a CTFE implementation, id.d.
I manually added a C++ header declaring the symbols we need and
adapted (simplified) the CMake script accordingly.
* More semantic() methods have been extracted as visitors; most notably
for expressions.
* Remove default label in switch which covers all enumeration values.
This fixes the warning "default label in switch which covers all enumeration values". We will already get a warning when _not_ all enumeration values are covered.
This is the last warning left on OSX/Clang, so with this change, we can build with -Werror.
* Fix warning: enumeral and non-enumeral type in conditional expression
* Fix warning: '%d' directive output may be truncated writing between 1 and 10 bytes into a region of size 5
* "fallthrough" is recognized by the compiler warning system
The part needing most attention was ddmd.root.ctfloat, ddmd.target (incl.
gen/target.cpp) and ddmd.builtin. The front-end is now prepared for
elaborate compile-time floating-point types to allow for proper cross-
compilation.
This version still uses the host's `real` type for compile-time reals,
except for MSVC hosts, which still use 64-bit doubles (when compiled with
DMD host compiler too).
Some other changes:
* semantic*() of Statements extracted from statement.d to statementsem.d
* mangle() -> mangleToBuffer()
* Identifier::string -> toChars()
* Token::float80value => floatvalue
* Dsymbol::isAggregateMember() => isMember()
* BoolExp is no more
* ddmd.root.ctfloat: LDC-specific CTFE builtins
Notably, the glue layer side of the changed multiple interface
inheritance layout (DMD a54e89d) has not been implemented yet.
This corresponds to DMD commit 3f6a763c0589dd03c1c206eafd434b593702564e.
`Dst` means overwrites target, `Upd` means that new target value depends
on old value of target.
This hides the failure from #1292 but does not fix the root cause.
Also adds the CMake infrastructure to compile and link the D source files.
The build is partially broken:
- A few files in Phobos and druntime do not build
- MSVC build is broken because of unresolved symbols involving reals
Commented lines preceding any #if preprocessor directives get aligned at
the #if indentation, i.e., column 0 in most cases, but are seldomly
directly related to the #if directive itself.
Here I use `#if 0` to comment out a large chunk of lines immediately
preceding an #if directive.
ARM has unsigned chars vs. signed chars on X86. Assigning -1 to a
char results in a narrowing conversion which is an error since GCC 5.x.
The fix is to explicitly use a signed char.
Includes all tagged with v2.067.0-b2. Does not includes latest druntime changes from ldc (head) branch.
This is known to be broken. I only merged the frontend stuff but did not try to compile something...
First merge of current development stream. Asm blocks are known to be broken.
DMD: 0c9f437bc24015707130ba42dc434d9cd58282fb
druntime: 86d49cfb3670904603df0cfdfe44c6fff565c0fc
Phobos: a8ca4f7964becac680af0eadbde05aa7d10fc338