- Frontend, druntime and Phobos are at version 2.110.0. (#4707, #4737, #4749, #4768, #4784, #4792, #4798)
- Support for LLVM 19. The prebuilt packages use v19.1.3 (incl. macOS arm64). (#4712, #4735, #4763, #4772)
- Objective-C: The compiler now properly supports Objective-C classes and protocols, as well as swift stub classes (via the
@swift
UDA). (#4777) - Android: NDK for prebuilt package bumped from r26d to r27c. (#4711, #4772)
- ldc2.conf:
%%ldcconfigpath%%
placeholder added - specifies the directory where current configuration file is located. (#4717) - Add support for building against a system copy of zlib through
-DPHOBOS_SYSTEM_ZLIB=ON
. (#4742) - Emscripten: The compiler now mimicks a musl Linux platform wrt. extra predefined versions (
linux
,Posix
,CRuntime_Musl
,CppRuntime_LLVM
). (#4750)
- Supports LLVM 15 - 19.
- Fix potentially corrupt IR layouts for bit fields. (#4646, #4708)
- Fix potentially corrupt IR layouts for explicitly under-aligned aggregates, a regression introduced in LDC v1.31. (#4734, #4736)
- ELF: Emit (most) instantiated symbols in COMDATs for proper link-time culling. (#3589, #4748)
- Support scalar right-hand-sides when bit-shifting vectors. (#3606, #4781)
- Fix LLVM data layout for the SPIR-V target used in D-Compute on LLVM 19+. (#4772)
- Frontend, druntime and Phobos are at version 2.109.1. (#4660, #4692)
- LLVM for prebuilt packages bumped to v18.1.6 (except for macOS arm64). (#4678)
- Added CI testing of Alpine Linux with musl libc (including some bug fixes). Removed the libunwind dependency when linking with musl libc. (#4650, #4691)
- Supports LLVM 15 - 18. Support for LLVM 11 - 14 was dropped. The CLI options
-passmanager
and-opaque-pointers
were removed.
- Frontend, druntime and Phobos are at version 2.108.1. (#4591, #4615, #4619, #4622, #4623, #4640)
- Support for LLVM 18. The prebuilt packages use v18.1.5 (except for macOS arm64). (#4599, #4605, #4607, #4604, #4628, #4642)
- Android: Switch to native ELF TLS, supported since API level 29 (Android v10), dropping our former custom TLS emulation (requiring a modified LLVM and a legacy ld.bfd linker). The prebuilt packages themselves require Android v10+ (armv7a) / v11+ (aarch64) too, and are built with NDK r26d. Shared druntime and Phobos libraries are now available (
-link-defaultlib-shared
), as on regular Linux. (#4618)- Please don't use the official macOS arm64 package (incl. the universal package on arm64) to cross-compile to Android. That package still uses our previous LLVM v17.0.6, which still includes the custom TLS emulation, but druntime expects native TLS now on Android. Resort to the x86_64 package in that case.
- Supports LLVM 11 - 18.
- Android: Support the lld linker. (#3918)
- Frontend, druntime and Phobos are at version 2.107.1. (#4563, #4577, #4587)
- Fix if-statement elision on constant true/false condition. (#4556, #4559)
- Frontend, druntime and Phobos are at version 2.106.1. (#4522, #4539, #4551)
- Support for LLVM 17. The prebuilt packages use v17.0.6. (#4533, #4540)
- New command-line options
-fno-{exceptions,moduleinfo,rtti}
to selectively enable some-betterC
effects. (#4522) - New command-line option
-fprofile-sample-use
for using sample-based profile data for optimization. Functionality and usage is identical to Clang's option with same name. (#4531) - New
ldc-profgen
tool for sample-based PGO, a copy of LLVM's llvm-profgen. (#4536)
- Supports LLVM 11.0 - 17.0.
- Frontend, druntime and Phobos are at version 2.105.2+. (#4476, #4498, #4513)
- The Windows installer now supports non-admin installs without an explicit
/CURRENTUSER
switch. (#4495)
- Initial compiler support for LoongArch64. druntime support is pending. (#4500)
- ImportC:
- Fix
static
linkage. (#4484, #4487) - Make gcc builtins available. (#4483)
- Apple: Support weird
asm("_" "<name>")
mangling stuff. (#4485, #4486)
- Fix
- AArch64: Fix an ABI-related ICE. (#4489, #4490)
- Fix GC2Stack optimization regression introduced in v1.24. (#4510, #4511)
- Fix druntime ABI divergence when compiling with sanitizers support. (#4508, #4509)
- Windows: Fix an instance of missed backslash-escaping in
-ftime-trace
JSON. (#4506, #4507)
- Frontend, druntime and Phobos are at version 2.104.2. (#4440)
- Support for LLVM 16. The prebuilt packages use v16.0.6. (#4411, #4423)
- We have come across miscompiles with LLVM 16's newly-enabled-by-default function specializations (on Win64 and macOS). To be on the safe side, LDC disables them by default for all targets via
-func-specialization-size-threshold=1000000000
inetc/ldc2.conf
(and separately for LTO on Posix platforms). To enable the function specializations, explicitly override it with e.g.-func-specialization-size-threshold=100
(the LLVM 16 default) and, for LTO on Posix, a similar LTO plugin option in the linker cmdline (see linker cmdline with-v
).
- We have come across miscompiles with LLVM 16's newly-enabled-by-default function specializations (on Win64 and macOS). To be on the safe side, LDC disables them by default for all targets via
- Supports LLVM 11.0 - 16.0. Support for LLVM 9 and 10 was dropped.
- 64-bit RISC-V: Now defaults to
-mattr=+m,+a,+f,+d,+c
('rv64gc' ABI) for non-bare-metal targets, i.e., if the target triple includes a valid operating system. (#4390)
- Fix function pointers/delegates on Harvard architectures (e.g., AVR). (#4432, #4465)
- Frontend, druntime and Phobos are at version 2.103.1, incl. new command-line option
-verror-supplements
. (#4345) - The
--plugin
commandline option now also accepts semantic analysis plugins. Semantic analysis plugins are recognized by exporting the symbol:extern(C) void runSemanticAnalysis(Module m)
. The plugin'srunSemanticAnalysis
function is called for each module, after all other semantic analysis steps (also after DCompute SemA), just before object codegen. (#4430) - New tool
ldc-build-plugin
that helps compiling user plugins. It downloads the correct LDC source version (if it's not already available), and calls LDC with the correct commandline flags to build a plugin. (#4430) - New commandline option
-femit-local-var-lifetime
that enables variable lifetime (scope) annotation to LLVM IR codegen. Lifetime annotation enables stack memory reuse for local variables with non-overlapping scope. (#4395) - C files are now automatically preprocessed using the external C compiler (configurable via
-gcc
or theCC
environment variable, and-Xcc
for extra flags). Extra preprocessor flags (e.g., include dirs and manual defines) can be added via new command-line option-P
. (#4417)- Windows: If
clang-cl.exe
is onPATH
, it is preferred over Microsoft'scl.exe
by default (e.g., to avoid printing the C source file name to stderr during preprocessing).
- Windows: If
- Less pedantic checks for conflicting C(++) function declarations when compiling multiple modules to a single object file ('Error: Function type does not match previously declared function with the same mangled name'). The error now only appears if an object file actually references multiple conflicting functions. (#4420)
- New command-line option
--fcf-protection
, which enables Intel's Control-Flow Enforcement Technology (CET). (#4437)
- Supports LLVM 9.0 - 15.0.
- Handle potential lambda mangle collisions across separately compiled object files (and the linker then silently picking an arbitrary implementation). Lambdas (and their nested global variables) are now internal to each referencing object file (
static
linkage in C). (#4415)
- New command-line option
--fwarn-stack-size=<threshold>
with LLVM 13+. (#4378) - New command-line option
--fsplit-stack
for incremental stack allocations, see https://llvm.org/docs/SegmentedStacks.html. (#4379)- New UDA
ldc.attributes.noSplitStack
disables it on a per-function basis. (#4382)
- New UDA
- New command-line option
--indent
for thetimetrace2txt
tool. (#4391)
- Fix potentially huge compile slowdowns with
-g
and LLVM 15+. (#4354, #4393) - Treat all LLVM warnings as regular warnings (e.g., errors with
-w
). Requires LLVM 13+. (#4384)
- The prebuilt Linux packages are now generated on a Ubuntu 20.04 box, so the min required
glibc
version has been raised from 2.26 to 2.31. (#4367)
- Fix empty
ldc.gccbuiltins_*
modules with LLVM 15+. (#4347, #4350) - Fix v1.31 regression wrt. potentially wrong constant pointer offsets. (#4362, #4365)
- Windows: Fix v1.32 regression wrt. leaking
Throwable.info
backtraces. (#4369) - Fix C assert calls for newlib targets. (#4351)
- Frontend, druntime and Phobos are at version 2.102.2. (#4323, #4341)
- LLVM for prebuilt packages bumped to v15.0.7. (#4311)
- Linker-level dead code elimination is enabled by default for Apple, wasm and all ELF targets too now. (#4320)
- Vector comparisons (==, !=, <, <=, >, >=) now yield a vector mask. Identity comparisons (
is
,!is
) still yield a scalarbool
. (3a59ee81) - New
timetrace2txt
tool for easier inspection of--ftime-trace
output. (#4335) --ftime-trace
now also traces CTFE execution: the start expression of CTFE and function calls during CTFE. (#4339)
- Supports LLVM 9.0 - 15.0.
- Now supports
-mabi
for RISC-V targets. (#4322)
- GC closures including variables with alignment > 16 bytes are now properly aligned. (ef8ba481)
- Fix regression with LLVM 13+: some errors in inline assembly don't stop compilation. (#4293, #4331)
- Frontend, druntime and Phobos are at version 2.101.2. (#4141, #4279)
- Bit fields support. (#4015)
- macOS on Apple M1: linking with
-g
is working again without unaligned pointer warnings/errors. This fixes file:line debug information in exception backtraces (requiringatos
, a macOS development tool installed with Xcode), without the need to set MACOSX_DEPLOYMENT_TARGET=11 and using a modified LLVM. (#4291) - Preliminary support for LLVM 15, incl. adding support for the 'new' pass manager (
-passmanager
) and opaque IR pointers (-opaque-pointers
). (way too many PRs to list!) - New command-line option
-fno-delete-null-pointer-checks
, mimicking the same option of GCC and Clang. (#4297) - New UDA
ldc.attributes.callingConvention("...")
, which overrides the default calling convention. For expert use only! (#4299) - New command-line option
-fno-discard-value-names
to keep value names in LLVM IR. (#4012) - dcompute: Support for OpenCL image I/O. (#3835)
- Initial ABI support for 64-bit RISC-V. (#4007)
- dcompute: Fix v1.29 regression when trying to use intrinsics. (#4266, #4267)
- Fix 64-bit symbol offsets. (#4264, #4283)
- Add missing 32-bit LTO versions of druntime & Phobos to Linux multilib package. (#4234, #4235)
- Fix compiler crash. (#4130, #4135)
- The former druntime and dmd-testsuite git submodules are now part of the LDC repo directly, leaving Phobos as single remaining submodule. We are now using a subset of the DMD repo (which includes druntime since v2.101), rewritten via
git filter-repo
and exposed asdmd-rewrite-*
branches/tags in the LDC repo, to merge newer frontend+druntime+tests from upstream DMD. Thetests/d2/dmd-testsuite
dir was moved totests/dmd
. (#4274, #4276)
- Frontend, druntime and Phobos are at version 2.100.1. (#3970, #4008, #4009)
- LLVM for prebuilt packages bumped to v14.0.3. (#3952, #3979)
- All LLVM targets are enabled now (=> more targets for cross-compilation).
- For the Mac package, the minimum supported macOS version has been raised to v10.12.
- The minimum D version for bootstrapping has been raised to v2.079 (for GDC: v9.4), in line with DMD. (#3956)
- The minimum LLVM version has been raised to v9.0. (#3960)
- New LeakSanitizer support via
-fsanitize=leak
(not (yet?) supported on Windows). (#4005) - New prebuilt universal macOS package, runnable on both x86_64 and arm64, and enabling x86_64/arm64 macOS/iOS cross-compilation targets out of the box (
-mtriple={x86_64,arm64}-apple-{macos,ios12.0}
). The x86_64 package doesn't bundle any arm64 libs anymore; the arm64 package newly bundles iOS libs (arm64). (#3958)- Avoid an external x86_64-only dub, use the bundled universal dub executable instead.
- Supports LLVM 9.0 - 14.0.
- Enable output of variable names in ASan and MSan error reporting. (#4004)
- Report unexpected type repaints as fatal ICEs instead of crashing. (#3990, #3991)
- Main CI was moved from Azure Pipelines to GitHub Actions. Any fork on GitHub can trivially reuse the fully automated prebuilt packages generation & upload to a GitHub release. (#3978)
- Frontend, druntime and Phobos are at version 2.099.1. (#3917, #3893, #3937, #3953)
- Support for LLVM 13 and 14. The prebuilt packages use v13.0.1. (#3842, #3951)
- On Linux, LDC doesn't default to the
ld.gold
linker anymore. The combination of LLVM 13+ and older gold linkers can apparently cause problems. We recommend using LLD, e.g., via-linker=lld
or by setting your default/usr/bin/ld
symlink; it's significantly faster too. -linkonce-templates
is less aggressive by default now and IMHO production-ready. (#3924)- When linking manually (not via LDC) against shared druntime, it is now required to link the bundled
lib/ldc_rt.dso.o[bj]
object file into each binary. It replaces the previously Windows-specificdso_windows.obj
. (#3850) - Breaking
extern(D)
ABI change for all targets: formal parameters of non-variadic functions aren't reversed anymore, in line with the spec. For 32-bit x86, the first parameter is accordingly now potentially passed in EAX, not the last one. So non-variadicextern(D)
functions with multiple explicit parameters will break if expecting parameters in specific registers or stack slots, e.g., naked DMD-style inline assembly. (#3873, ldc-developers/phobos@3d725fce8f0acb78bf6cb984a8462e81e8e1b715)
- Supports LLVM 6.0 - 14.0.
- Basic compiler support for Newlib targets, i.e., triples like
arm-none-newlibeabi
. (#3946)
- Linux: Make LTO work with LLD. (#3786, #3850)
- Windows: Fix most undefined symbols with
-dllimport=all
without-linkonce-templates
. (#3916, #3923, #3926, #3927, #3928, #3931, #3932) - Capture NRVO variable by ref for stack closures. (#3883, #3902)
-ftime-trace
: JSON-escape filenames. (#3947, #3948)- RISC-V: Use 128-bit quadruple
real
. (#3892)
- Frontend, druntime and Phobos are at version 2.098.1+. (#3886, #3896)
- New
@hidden
UDA (as counterpart ofexport
). (#3855) - Support 'raw mangles' via leading
\1
inpragma(mangle)
strings, e.g., to access magic linker symbols on Mac. (#3854) - New
@noSanitize
UDA to selectively disable sanitizer instrumentation of functions. (#3889) - WebAssembly: Larger default stack size (1 MB) and protection against stack overflow overwriting global memory. (#3882)
- Linux x86/x64: Fix TLS range with static druntime and bfd/lld linkers. (#3849, https://github.com/ldc-developers/druntime/commit/ec3c0aafbf4b6f3345e276e21a26ffee077470cf)
- Support
rdtscp
in DMD-style inline assembly. (#3895)
- Frontend, druntime and Phobos are at version 2.098.0+. (#3821, #3839, #3844, #3852)
- Windows:
-dllimport=defaultLibsOnly
(e.g., implied by-link-defaultlib-shared -fvisibility=hidden
) doesn't require-linkonce-templates
anymore. (#3816) - dcompute: Add support for OpenCL image I/O. (#3835)
- Supports LLVM 6.0 - 12.0.
- Fix dynamic casts across binary boundaries (DLLs etc.). (dlang/druntime#3543)
- Windows: Fix potentially wrongly caught exceptions due to non-unique
TypeInfo_Class
names. (#3520) - Don't silently ignore invalid external tool specifications. (#3841)
- LLVM v11.1: Add missing PGO
ldc-profdata
tool.
- Frontend, druntime and Phobos are at version 2.097.2. (#3811)
- Revamped and improved
-ftime-trace
implementation for compiler profiling/tracing, now excluding LLVM-internal traces, adding frontend memory tracing, source file location infos etc. (#3797) - An official prebuilt package for Linux AArch64 is available again after migrating from Shippable to Travis. (#3733)
- ICE for 64-bit targets with 32-bit pointer size. (#3802, #3808)
- Implement
core.atomic.pause()
for some architectures. (#3806, #3807)
- Frontend, druntime and Phobos are at version 2.097.1+. (#3741, #3770, #3771, #3790, #3794, #3796, #3799) (new)
- LLVM for prebuilt packages bumped to v12.0.1, and Linux base image to Ubuntu 18.04. Unfortunately, the dynamic-compile (JIT) functionality is lost this way - it needs some more work to adapt to a newer LLVM API. (#3701, #3789)
- Prebuilt packages now bundle reggae, a meta build tool to generate ninja/make build files for dub projects (and more). Building large projects with many dependencies can be significantly sped-up via parallelization and dependency tracking for incremental builds. (#3739)
Basic usage, in a dub project dir (containing a
dub.{sdl,json}
file):reggae -b ninja|make --dc=ldc2 # only needed the first time or when adding source files ninja|make [-j<N>]
- Greatly improved DLL support on Windows, making it almost as easy as on Posix:
-fvisibility=public
now also affects Windows, exporting all defined symbols as on Posix, without explicitexport
visibility. Compiling a DLL with-shared
now defaults to-fvisibility=public
for consistency with Posix. (#3703)- This paved the way for druntime and Phobos DLLs, now bundled with prebuilt Windows packages and linkable via
-link-defaultlib-shared
(default with-shared
, consistent with Posix targets). Previous hacks to partially accomodate for multiple, statically linked druntimes and Phobos in a single process (GC proxy etc.) aren't required any longer. With-link-defaultlib-shared
, LDC now defaults to-mscrtlib=msvcrt
, linking against the shared MSVC runtime. (ldc-developers/druntime#197, #3704, ldc-developers/druntime#198) - Limitation: TLS variables cannot be accessed directly across DLL boundaries. This can be worked around with an accessor function, e.g., ldc-developers/druntime@5d3e21a35d.
- Non-TLS
extern(D)
global variables not defined in a root module aredllimport
ed (with-fvisibility=public
, or - restricted to druntime/Phobos symbols - with-link-defaultlib-shared
). Compiling all modules of a DLL at once thus avoids linker warnings about 'importing locally defined symbol'. When linking a DLL against a static library, the static library may likely need to be compiled with-fvisibility=public
to make its globals importable from the DLL. There's a new-dllimport
option for explicit control. (#3763) - Caveat: symbols aren't uniqued across the whole process, so can be defined in multiple DLLs/executables, each with their own address, so you cannot rely on TypeInfos, instantiated symbols and functions to have the same address for the whole process.
- When linking manually (not via LDC), binaries linked against druntime DLL need to include new
lib\dso_windows.obj
. - To restore the previous behavior of
-shared
, add-fvisibility=hidden -link-defaultlib-shared=false
.
- Windows: ANSI color codes can now be enforced for redirected stderr via
-enable-color
. (#3744) - Prebuilt Linux and Mac packages now use the mimalloc allocator, significantly increasing compiler performance in some cases. (#3758, #3759)
- The prebuilt macOS x64 package now bundles shared druntime/Phobos libs for iOS too. (#3764)
- Possibly more performant shared Phobos library by compiling to a single object file with implicit cross-module inlining. (#3757)
- New
-cov-increment
option for more performant coverage count execution. (#3724) -fsanitize=memory
: Bundle according LLVM compiler-rt library and add new-fsanitize-memory-track-origins
option. (#3751)- New LDC-specific language addition:
__traits(initSymbol, <aggregate type>)
with semantics equivalent toTypeInfo.initializer()
, but circumventing theTypeInfo
indirection and thus e.g. also usable for-betterC
code. (#3774, ldc-developers/druntime#201)
- Supports LLVM 6.0 - 12.0.
- Fix debuginfo source file paths, e.g., including directories in exception stack traces. (#3687)
- Fix potentially corrupt context pointers for nested functions with
-linkonce-templates
. (#3690, #3766) - Predefine version
CppRuntime_Gcc
for musl targets. (#3769) - RVO: In-place construct
<temporary>.__ctor(<args>)
. (#3778, #3779) -linkonce-templates
: Make sure special struct TypeInfo members are semantically analyzed before emitting theTypeInfo
. (#3783)
- Frontend, druntime and Phobos are at version 2.096.1+, incl. new
ldmd2
command-line option-gdwarf=<version>
(use-dwarf-version
forldc2
). (#3678, #3706)
- Supports LLVM 6.0 - 12.0.
- v1.25 regression: TypeInfo for interface gives invalid string for name. (#3693)
- Make enums show up correctly as members of a struct when debugging. (#3688, #3694)
- Some new GCC builtins are available in
ldc.gccbuiltins_*
, by not rejecting LLVMi1
anymore (mapping to Dbool
instead). Thanks Bruce! (#3682) - dcompute: Don't reject CUDA versions 7.x - 8.0.0. (#3683)
- Don't enforce the frame pointer for functions with GCC-style inline asm. (#3685)
-i
: Excludeldc.*
modules by default. (#3679)- Fix some cases of insufficient alignment for arguments and parameters. (#3692, #3698)
- Fix a few issues with LLVM 12. (#3697, #3708)
- Frontend, druntime and Phobos are at version 2.095.1, incl. new command-line option
-makedeps
. (#3620, #3658, #3668) - Support for LLVM 12 and LLVM 11.1. (#3663, ldc-developers/druntime#195)
- LLVM for prebuilt packages bumped to v11.0.1. (#3639)
- New prebuilt package for native macOS/arm64 ('Apple silicon'). (#3666)
- LDC invocations can now be nicely profiled via
--ftime-trace
. (#3624) - Struct TypeInfos are emitted into referencing object files only, and special TypeInfo member functions into the owning object file only. (#3491)
- Windows:
- New CI-automated Windows installer corresponding to the multilib package. (#3601)
- Bundled MinGW-based libs bumped to MinGW-w64 v8.0.0. (#3605)
- Bundled libcurl upgraded to v7.74.0. (#3638)
- Breaking ABI changes:
extern(D)
: Pass non-PODs by ref to temporary. (#3612)- Win64: Pass/return delegates like slices - in (up to) 2 GP registers. (#3609)
- Win64
extern(D)
: Pass/return Homogeneous Vector Aggregates in SIMD registers. (#3610)
-linkonce-templates
comes with a new experimental template emission scheme and is now suited for projects consisting of multiple object files too. It's similar to C++, emitting templated symbols into each referencing compilation unit with optimizer-discardablelinkonce_odr
linkage. The consequences are manifold - each object file is self-sufficient wrt. templated symbols, naturally working around any template-culling bugs and also meaning increased opportunity for inlining and less need for LTO. The probably biggest advantage is that the optimizer can discard unusedlinkonce_odr
symbols early instead of optimizing and forwarding to the assembler. So this is especially useful to decrease compilation times with-O
and can at least in some scenarios greatly outweigh the (potentially very much) higher number of symbols defined by the glue layer - on my box, building optimized dub (all-at-once) is 28% faster with-linkonce-templates
, and building the optimized Phobos unittests (per module) 56% faster. Libraries compiled with-linkonce-templates
can generally not be linked against dependent code compiled without-linkonce-templates
; the other way around works. (#3600)- Emit function/delegate literals as
linkonce_odr
, as they are emitted into each referencing compilation unit too. (#3650) - Exploit ABI specifics with
-preview=in
. (#3578) - Musl: Switch to cherry-picked libunwind-based backtrace alternative. (#3641, ldc-developers/druntime#192)
- Supports LLVM 6.0 - 12.0.
- Fix LTO with
-link-internally
. The prebuilt Windows packages don't bundle an externallld-link.exe
LLD linker anymore. (#2657, #3604) - Add source location information for
TypeInfo
diagnostics with-betterC
. (#3631, #3632) - Keep init symbols of built-in
TypeInfo
classes mutable just like any other TypeInfo, so that e.g.synchronized()
can be used on the implicit monitor. (#3599) - Windows: Fix colliding EH TypeDescriptors for exceptions with the same
TypeInfo_Class
name. (#3501, #3614) - Predefine version
FreeStanding
when targeting bare-metal. (#3607, #3608) - druntime: Define
rt.aaA.AA
as naked pointer, no struct wrapper. (#3613) - Misc. fixes and improvements for the CMake scripts, incl. new defaults for
LDC_INSTALL_{LTOPLUGIN,LLVM_RUNTIME_LIBS}
. (#3647, #3655, #3654, #3673) -cleanup-obj
: Put object files into unique temporary directory by default. (#3643, #3660)- druntime: Add missing
core.atomic.atomicFetch{Add,Sub}
. (#3646, ldc-developers/druntime#193) - Fix regression wrt. non-deleted temporary
-run
executable. (#3636)
- Ignore
-enable-cross-module-inlining
if inlining is generally disabled. (#3664) - Travis CI ported to GitHub Actions (excl. Linux/AArch64). (#3661, #3662)
- Frontend, druntime and Phobos are at version 2.094.1+, incl. new command-line options
-cov=ctfe
,-vtemplates=list-instances
and-HC=<silent|verbose>
. (#3560, #3582, #3588, #3593) - Support for LLVM 11. The prebuilt packages use v11.0.0; x86 packages newly include the LLVM backend for AMD GPUs. (#3546, #3586)
- Experimental support for macOS on 64-bit ARM, thanks Guillaume! All druntime/Phobos unit tests pass. The macOS package includes prebuilt druntime/Phobos; adapt the SDK path in
etc/ldc2.conf
and then use-mtriple=arm64-apple-macos
to cross-compile. (dlang/druntime#3226, #3583)
- Supports LLVM 6.0 - 11.0.
- Fix potentially wrong context pointers when calling delegate literals. (#3553, #3554)
- Fix alignment issue when casting vector rvalue to static array. (c8889a9219)
- Make sure lambdas in
pragma(inline, true)
functions are emitted into each referencing compilation unit. (#3570) - Fix
-Xcc=-Wl,...
by dropping support for comma-separated list ofcc
options. (c61b1357ed) - Fix ThreadSanitizer support by not detaching main thread upon program termination. (#3572)
- Traverse full chain of nested aggregates when resolving a nested variable. (#3556, #3558)
- CI: Linux AArch64 is now also tested by a Travis job, because Shippable has sadly become unreliable. (#3469)
- Building LDC with an LDC host compiler might be somewhat faster now (requires
-DLDC_LINK_MANUALLY=OFF
in the CMake command-line on non-Windows hosts). (#3575)
- Frontend, druntime and Phobos are at version 2.093.1+, incl. new command-line option
-vtemplates
. (#3476, #3538, #3541) - Min required LLVM version raised to v6.0, dropping support for v3.9-5.0. (#3493)
- LLVM for prebuilt packages bumped to v10.0.1. (#3513)
- The prebuilt Mac package now also includes prebuilt druntime/Phobos for the iOS/x86_64 simulator, making cross-compilation work out of the box with
-mtriple=x86_64-apple-ios12.0
. (#3478) - Windows: New
-gdwarf
CLI option to emit DWARF debuginfos for MSVC targets, e.g., for debugging with gdb/lldb. (#3533) - New
-platformlib
CLI option to override the default linked-with platform libraries, e.g., when targeting bare-metal. (#3374, #3475)
- Supports LLVM 6.0 - 10.0.
- Fix regression since v1.22: shared druntime potentially overriding libstdc++ symbols and breaking exceptions in C++ libraries. (#3530, #3537)
- Fix naked DMD-style asm emission for non-Mac x86 Darwin targets (e.g., iOS simulators). (#3478)
-betterC
: Don't use unsupported EH for handling clean-ups. (#3479, #3482)- dcompute: Fix wrong address space loads and stores. Thx Rob! (#3428)
- Fix ICE wrt. missing IR declarations for some forward-declared functions. (#3496, #3503)
- Fix ICE wrt. inline IR and empty parameter types tuple. (#3509)
- Fix PGO issues. (#3375, #3511, #3512, #3524)
- Improve support for LLVM's ThreadSanitizer. (#3522)
- Fix linker cmdline length limitation via response files. (#3535, #3536)
- Compiler performance wrt. string literals emission has been improved. Thx @looked-at-me! (#3490, #3492)
- Link libstdc++ statically for
libldc-jit.so
of prebuilt Linux packages, to increase portability. (#3473, #3474) - Set up Visual D when using the Visual Studio CMake generator, making LDC compiler development on Windows a smooth out-of-the-box experience. (#3494)
- Frontend, druntime and Phobos are at version 2.092.1+. (#3413, #3416, #3429, #3434, #3452, #3467)
- AArch64: All known ABI issues have been fixed. C(++) interop should now be on par with x86_64, and variadics usable with
core.{vararg,stdc.stdarg}
. (#3421) - Windows hosts: DMD's Visual C++ toolchain detection has been adopted. As that's orders of magnitude faster than the previous method involving the MS batch file, auto-detection has been enabled by default, so if you have a non-ancient Visual C++ installation, it will now be used automatically for linking. The environment setup has been reduced to the bare minimum (
LIB
andPATH
). (#3415) - FreeBSD x64: CI with CirrusCI is now fully green and includes automated prebuilt package generation. The package depends on the
llvm
ports package and should currently work on FreeBSD 11-13. (#3453, #3464) - Link-time overridable
@weak
functions are now emulated for Windows targets and work properly for ELF platforms. For ELF, LDC doesn't emit any COMDATs anymore. (#3424) - New
ldc.gccbuiltins_{amdgcn,nvvm}
for AMD GCN and NVIDIA PTX targets. (#3411) - druntime: Significant speed-up for
core.math.ldexp
. (#3440, #3446)
- Supports LLVM 3.9 - 10.0.
- Cross-module inlining (incl.
pragma(inline, true)
): Enable emission into multiple object files. This may have a significant impact on performance (incl. druntime/Phobos) when not using LTO. (#3126, #3442) - Android: Fix TLS initialization regression (introduced in v1.21) and potential alignment issues. Unfortunately, the
ld.bfd
linker is required for our custom TLS emulation scheme, unless you're willing to use a custom linker script. So-linker=bfd
is the new default for Android targets. (#3462) - Casting (static and dynamic) arrays to vectors now loads the data instead of splatting the first element. (#3418, #3419)
- Fix return statements potentially accessing memory from destructed temporaries. (#3426)
- Add proper support for
-checkaction=halt
. (#3430, #3431) - druntime: Include
core.stdcpp.*
modules. (#3103, #3158) - GCC-style asm: Add support for indirect input operands (
"m"
). (#3438) - FreeBSD: Fix backtraces for optimized code by switching to external
libexecinfo
. (#3108, #3453) - FreeBSD: Fix C math related issues (incl. CTFE math issues) by bringing
core.stdc.{math,tgmath}
up to speed. (dlang/druntime#3119) - Fix ICE for captured parameters not passed on the LLVM level. (#3441)
- Convenience fixes for RISC-V and other exotic targets. (#3457, #3460)
- When printing compile-time reals to hex strings (mangling, .di headers), LDC now uses LLVM instead of the host C runtime, for proper and consistent results. (#3410)
- One limitation for exotic hosts wrt. C
long double
precision has been lifted. (#3414) - For AVR targets, the compiler now predefines
AVR
and emits all TLS globals as regular__gshared
ones. (#3420) - WebAssembly: New memory grow/size intrinsics. (ldc-developers/druntime#187)
- New
-fno-plt
option to avoid PLT external calls. (#3443) - iOS/arm64 CI, running the debug druntime & Phobos unittests on an iPhone 6S. Thx Jacob for this tedious work! (#3379, #3450)
- Frontend, druntime and Phobos are at version 2.091.1+, incl. new CLI switches
-verror-style
and-HC
,-HCd
,-HCf
. (#3333, #3399) - iOS (incl. watchOS and tvOS) support has landed in druntime and Phobos (thanks Jacob!). All unittests are green on iOS/arm64. The prebuilt macOS package includes prebuilt druntime & Phobos libraries for iOS/arm64, for first
-mtriple=arm64-apple-ios12.0
cross-compilation experiments. (#3373) - LLVM for prebuilt packages upgraded to v10.0.0. Android NDK version bumped to r21. (#3307, #3387, #3398)
- Initial support for GCC/GDC-style inline assembly syntax, besides DMD-style inline asm and LDC-specific
__asm
, enabling to write inline asm that is portable across GDC/LDC and corresponds to the GCC syntax in C. See ldc-developers/druntime#171 for examples wrt. how to transition from__asm
to similar GCC-style asm. (#3304) - Inline assembly diagnostics have been extended by the D source location. (#3339)
- Android:
- Revamped druntime initialization, fixing related issues for i686/x86_64 targets, enabling the usage of the
ld.gold
linker (bfd isn't required anymore) as well as getting rid of the Dmain()
requirement. (#3350, #3357, ldc-developers/druntime#178) - Reduced size for shared libraries by compiling druntime and Phobos with hidden visibility. (#3377)
- Revamped druntime initialization, fixing related issues for i686/x86_64 targets, enabling the usage of the
- Supports LLVM 3.9 - 10.0.
- Fixed tail calls in thunks, affecting AArch64 (the debug libraries now work) and possibly other architectures. (#3329, #3332)
- Windows: Do not emit any column infos for CodeView by default (like clang) & add
-gcolumn-info
. (#3102, #3388) - Windows: Do not leak MSVC-environment-setup into
-run
child processes. A newLDC_VSDIR_FORCE
environment variable can be used to enforce MSVC toolchain setup. (#3340, #3341) - Windows: Fix memory leak when throwing exceptions in threads. (#3369, ldc-developers/druntime#181)
- Try to use
memcmp
for (in)equality of non-mutable static arrays and mutable slices. (#3400, #3401) ldc.gccbuiltins_*
: Lift 256-bit vector limit, adding 174 AVX512 builtins for x86; 512-bit vector aliases have been added tocore.simd
. (#3405, #3406)
core.bitop.{bts,btr,btc}
are now CTFE-able. (ldc-developers/druntime#182)- Do not fallback to host for critical section size of unknown targets. (#3389)
- Linux: Possibility to avoid passing
-fuse-ld
tocc
via-linker=
. (#3382) - WebAssembly: Switch from legacy linked-list ModuleInfo registry to
__minfo
section. (#3348) - Windows: Bundled libcurl upgraded to v7.69.1, incl. the option to link it statically. (#3378)
- Windows: Switch to wide
wmain
C entry point in druntime. (#3351) - druntime unittests are now compiled with
-checkaction=context
.
- When building LDC, old LDC 0.17.*/ltsmaster host compilers miscompile LDC ≥ 1.21, leading to potential segfaults of the built LDC. Ltsmaster can still be used to bootstrap a first compiler and then let that compiler compile itself. (#3354)
- Non-Windows: Revert to strong
ModuleInfo.importedModules
references for correct module constructors execution order. (#3346, #3347)
- Frontend, druntime and Phobos are at version 2.090.1+. (#3262, #3296, #3306, #3317, #3326)
- Codegen preparations for:
- iOS/tvOS/watchOS on AArch64. Thanks Jacob! (#3288)
- WASI (WebAssembly System Interface) (#3295)
- The config file for multilib builds has been restructured by adding a separate section for the multilib target. This avoids
--no-warn-search-mismatch
for the linker and enables support for LLD. (#3276) - Support for embedding
pragma({lib,linkerDirective}, ...)
in Mach-O object files. (#3259) E.g.,pragma(linkerDirective, "-framework", "CoreFoundation");
makes Apple's linker pull in that framework when pulling in the compiled object file. ELF object files newly embedpragma(lib, ...)
library names in a special.deplibs
section, but that only works with LLD 9+ for now. - The
ldc-build-runtime
tool has been slightly revised;--dFlags
now extends the base D flags instead of overriding them. (1200601d44280d5f948a577b444ffa2dd4f9e433) ModuleInfo.importedModules
are now emitted as weak references (except on Windows, for LLD compatibility), following DMD. (#3262)- Windows: Bundled MinGW-based libs now support wide
wmain
andwWinMain
C entry points. (#3311)
- Supports LLVM 3.9 - 10.0.
- Potential stack overflows on Linux in GC worker threads. (#3127, dlang/druntime#2904)
- Support 2 leading dashes (not just 1) in command-line pre-parsing, thus fixing config file section lookup when using
--mtriple
and not ignoring--conf
and--lowmem
any longer. (#3268, #3275) - Support for data directives in DMD-style inline asm. (#3299, #3301)
- Cherry-picked fixes for soft-float targets. (#3292, dlang/phobos#7362, dlang/phobos#7366, dlang/phobos#7377)
- ICE during debuginfo generation for function literals inside enum declarations. (#3272, #3274)
- Misc. tweaks for
dmd-testsuite
: (#3287, #3306)- Significantly accelerated by skipping uninteresting permutations.
- Switch from Makefile to
run.d
, incl. moving LDC-specific exceptions from Makefile to individual test files and support for extendedDISABLED
directives.
- Addition of (recommendable!) Cirrus CI service (incl. FreeBSD) and removal of Semaphore CI. (#3298)
- Some improvements for
gdmd
host compilers, incl. CI tests. (#3286)
- Frontend, druntime and Phobos are at version 2.089.1+. (#3192, #3210, #3215, #3232, #3242, #3255, #3261)
- LLVM for prebuilt packages upgraded to v9.0.1; our fork has moved to ldc-developers/llvm-project. The x86[_64] packages newly include the experimental AVR backend. (#3244)
- Android: A prebuilt AArch64 package has been added. It also includes prebuilt druntime/Phobos libraries for x86_64; the armv7a package includes the i686 libraries. So all 4 Android targets are covered with prebuilt druntime/Phobos. (#3244)
- Breaking
extern(D)
ABI change for Posix x86[_64]: non-POD arguments are now passed by ref under the hood, just like they already were forextern(C++)
. Some superfluous implicit blits have been optimized away as well, for all targets. (#3204) - Posix: Defaults to
cc
now for linking, notgcc
(orclang
for FreeBSD 10+) - if theCC
environment variable isn't set. Override with-gcc=<gcc|clang>
. (#3202) - Codegen elision of dead branches for
if
statements with constant condition (not depending on enabled LLVM optimizations). (#3134) - druntime: New
llvm_sideeffect
intrinsic, new@cold
function UDA and extended CAS functionality incore.atomic
(incl. support for weak CAS and separate failure ordering). (ldc-developers/druntime#166, ldc-developers/druntime#167, #3220) - Windows: Bundled MinGW-based libs have been upgraded to use the .def files from MinGW-w64 v7.0.0. They now also contain a default
DllMain
entry point as well as_[v]snprintf
. (libs, #3142)
- Supports LLVM 3.9 - 9.0.
- Misc. CMake issues with some LLVM 9 configurations. (#3079, #3198)
- Equality/identity comparisons of vectors with length ≥ 32. (#3208, #3209)
ldc.gccbuiltins_*
druntime modules now available to non-installed compiler too. (#3194, #3201)- Potential ICE when applying
@assumeUsed
on global union. (#3221, #3222) Context from outer function, but no outer function?
regression introduced in v1.11 (inability to access outer context fromextern(C++)
methods). (#3234, #3235)- Lvalue expressions with nested temporaries to be destructed yielding a wrong lvalue. (#3233)
- druntime: Cherry-picked fix wrt. GC potentially collecting objects still referenced in other threads' TLS area. (dlang/druntime#2558)
- Frontend, druntime and Phobos are at version 2.088.1. (#3143, #3161, #3176, #3190)
- Support for LLVM 9.0. The prebuilt packages have been upgraded to LLVM 9.0.0. (#3166)
- Preliminary Android CI, incl. experimental prebuilt armv7a package generation (API level 21, i.e., Android 5+). (#3164)
- Bundled dub upgraded to v1.17.0+ with improved LDC support, incl. cross-compilation (e.g.,
--arch=x86_64-pc-windows-msvc
). (dlang/dub#1755, Wiki) - Init symbols of zero-initialized structs are no longer emitted. (#3131)
- druntime: DMD-compatible
{load,store}Unaligned
andprefetch
added tocore.simd
. (ldc-developers/druntime#163) - JIT improvements, incl. multi-threaded compilation. (#2758, #3154, #3174)
- Supports LLVM 3.9 - 9.0.
- Don't error out when initializing a
void
vector. (#3130, #3139) - druntime: Fix exception chaining for latest MSVC runtime v14.23, shipping with Visual Studio 2019 v16.3. (ldc-developers/druntime#164)
- Keep lvalue-ness when casting associative array to another AA. (#3162, #3179)
- Frontend, druntime and Phobos are at version 2.087.1+. (#3093, #3124)
- The upstream fix wrt. local templates can now receive local symbols hasn't been ported yet. (#3125)
- LLVM for prebuilt packages upgraded to v8.0.1. (#3113)
- Breaking change: Init symbols, TypeInfos and vtables of non-
export
ed aggregates are now hidden with-fvisibility=hidden
. (#3129) - LLVM 8+: New intrinsics
llvm_*_sat
(saturation arithmetic) andllvm_{min,max}imum
. Thanks Stefanos! (ldc-developers/druntime#161, ldc-developers/druntime#162)
- Supports LLVM 3.9 - 8.0.
- Fix for v1.16.0 regression when returning
void
expressions. (#3094, #3095) -lowmem
(and on Windows,--DRT-*
options) in response files (e.g., used by dub) aren't ignored anymore. (#3086)- Windows: LDC and LDMD now internally use UTF-8 strings only, incl. command-line options and environment variables. The LDC install dir, source file names etc. can now contain non-ASCII chars. For proper console output, especially to stderr, you'll need Windows 10 v1809+ and may need to set a Unicode console font (e.g., Consolas). (#611, #3086)
- Android: Linker errors when building LDC/LDMD should be fixed. (#3128)
- Support for recent
gdmd
as D host compiler. Thanks Moritz! (#3087) - Do not require gold plugin when linking with LLD. (#3105)
- Enable linker stripping on FreeBSD (with non-
bfd
linkers). (#3106) - Some JIT bind fixes. (#3099, #3100)
- If you encounter segfaults in GC worker threads with shared druntime on Linux that are fixed by disabling new parallel GC marking (e.g., via
--DRT-gcopt=parallel:0
in executable cmdline), please let us know about it: #3127
- Frontend, druntime and Phobos are at version 2.086.1, incl. a DIP1008 fix. (#3062, #3076, #3091)
- Non-Windows x86: Faster
real
versions ofstd.math.{tan,expi}
. (#2855) - dcompute: New
__traits(getTargetInfo, "dcomputeTargets")
. (#3090)
- Supports LLVM 3.9 - 8.0 (incl. 7.1).
- Make
pragma(LDC_no_typeinfo)
actually elide TypeInfo emission for structs, classes and interfaces. (#3068) - Windows: Fix DLL entry point in MinGW-based libs. (https://github.com/ldc-developers/mingw-w64-libs/commit/8d930c129daa798379b3d563617847f8e895f43e)
- WebAssembly: Use
--export-dynamic
when linking with LLD 8+. (#3023, #3072) - Fix corrupt
this
in functions nested in in/out contracts. (45460a1) - Fix identity comparisons of integral vectors. (a44c78f)
- Improved handling of unsupported vector ops. (a44c78f)
- uClibc: Fix C assert calls. (#3078, #3082)
- Improved error message on global variable collision. (#3080, #3081)
- Frontend, druntime and Phobos are at version 2.085.1, incl. new command-line options
-preview
,-revert
,-checkaction=context
,-verrors-context
and-extern-std
. (#3003, #3039, #3053)- The Objective-C improvements from DMD 2.085 are not implemented. (#3007)
- Support for LLVM 8.0. The prebuilt packages have been upgraded to LLVM 8.0.0 and include the Khronos SPIRV-LLVM-Translator, so that dcompute can now emit OpenCL too. (#3005)
- Compiler memory requirements can now be reduced via the new
-lowmem
switch, which enables the garbage collector for the front-end and sacrifices compile times for less required memory. In some cases, the overall max process memory can be reduced by more than 60%; see #2916 (comment) for some numbers. (#2916)- Note for package maintainers: this feature requires a recent D host compiler (most notably, it doesn't work with ltsmaster), ideally LDC 1.15 itself due to important GC memory overhead improvements in 2.085 druntime.
- Support for generic
@llvmAttr("name")
parameter UDAs, incl. new@restrict
with C-like semantics. (#3043) - macOS: 32-bit support was dropped in the sense of not being CI-tested anymore and the prebuilt macOS package now containing x86_64 libraries only.
MACOSX_DEPLOYMENT_TARGET
for the prebuilt package has been raised from 10.8 to 10.9. - Prebuilt packages don't depend on libtinfo and libedit anymore. (#1827, #3019)
- x86: SSSE3 isn't required for the prebuilt packages and generated optimized binaries anymore. (#3045)
- Supports LLVM 3.9 - 8.0.
- Implicit cross-module-inlining of functions annotated with
pragma(inline, true)
without explicit-enable-cross-module-inlining
has been restored. (#2552, #3014) - Propagate well-known length of newly allocated dynamic arrays for better optimizability. (#3041, #3042)
- JIT: Support implicit
__chkstk
calls for Windows targets, e.g., for large stack allocations. (#3051)
- Addition of Azure Pipelines as CI service. It is the new main CI service and responsible for creating all prebuilt x86(_64) packages. AppVeyor has been dropped completely and CircleCI rededicated. (#2998)
- Frontend, druntime and Phobos are at version 2.084.1, incl. new command-line options
-mixin
,-{enable,disable}-switch-errors
and-checkaction
. (#2946, #2977, #2999)- Options
-release
,-d-debug
and-unittest
don't override preceding, more specific options (-{enable,disable}-{asserts,invariants,preconditions,postconditions,contracts}
) anymore.
- Options
- Linking WebAssembly doesn't require
-link-internally
(integrated LLD) anymore; an external linker (default:wasm-ld
, override with-linker
) can be used as well. (#2951) - Prebuilt Windows packages include LTO-able 32-bit druntime/Phobos too (previously: Win64 only).
- AddressSanitizer support for fibers (requires rebuilding the runtime libraries with CMake option
RT_SUPPORT_SANITIZERS=ON
). (#2975, ldc-developers/druntime#152) - Support
pragma(LDC_extern_weak)
for function declarations - if the function isn't available when linking, its address is null. (#2984)
- Supports LLVM 3.9 - 7.0.
- Fix C++ mangling regression for functions with multiple
real
parameters introduced with v1.13, preventing to build DMD. (#2954, dlang/dmd#9129) - Fix context of some nested aggregates. (#2960, #2969)
- Support templated LLVM intrinsics with vector arguments. (#2962, #2971)
- Avoid crashes with
-allinst
(fix emission of only speculatively nested functions). (#2932, #2940) - Fix XRay support for LLVM 7+. (#2965)
- AArch64: Fix DMD-style profile measurements. (#2950)
- Be less picky about placement of pragmas (allow intermediate
extern(C)
etc.). (#2599) - MSVC: Fix
real
C++ mangling to match Visual C++long double
. (#2974) - Fix bad ICE noticed when building protobuf-d. (#2990, #2992)
- Fix ICE when directly indexing vector return value. (#2988, #2991)
- Fix identity comparisons of complex numbers. (#2918, #2993)
- MIPS32 fix for
core.stdc.stdarg
. (#2989, ldc-developers/druntime#153) - Fix
core.atomic.cas()
for 64-bit floating-point values. (#3000, #3001)
- Buggy older
ld.bfd
linker versions may wrongly strip out required symbols, e.g., ModuleInfos (so that e.g. no module ctors/dtors are run). LDC defaults told.gold
on Linux.
- Frontend, druntime and Phobos are at version 2.083.1. (#2878, #2893, #2920, #2933)
- The Windows packages are now fully self-sufficient, i.e., a Visual Studio/C++ Build Tools installation isn't required anymore, as we now ship with MinGW-w64-based libraries, similar to DMD. Check out the included README.txt for all relevant details. (dlang/installer#346, #2886, Wiki: Cross-compiling with LDC)
- Debug info improvements:
- For GDB: printing global and imported symbols, non-member and member function calls. (#2826)
- For Visual Studio and mago: names, by-value params, nested variables. (#2895, #2908, #2909, #2912)
- Associative arrays now showing up properly (at least with mago), not as opaque
void*
anymore. (#2869) -gc
now translates D names to C++ ones, e.g., to use the regular Visual Studio debugger (bypassing mago) and as preparation for VS Code debugging with Microsoft's C/C++ plug-in (screenshots). Thanks to Oleksandr for this contribution and the AA fix! (#2869)
- New command-line option
-fvisibility=hidden
to hide functions/globals not marked asexport
(for non-Windows targets), primarily to reduce the size of shared libraries. Thanks to Andrey for stepping up! (#2894, #2923) - Dropped support for LLVM 3.7 and 3.8. (#2872)
- LLVM for prebuilt packages upgraded to v7.0.1.
- Linux: now defaulting to
ld.gold
linker in general, not just with-flto=thin
, as buggy olderld.bfd
versions may wrongly strip out required symbols (change with-linker
). (#2870) - Improved support for Android/x86[_64], musl libc and FreeBSD/AArch64. (#2917, ldc-developers/druntime#146)
- LDC-specific druntime:
ldc.simd.inlineIR
moved/renamed toldc.llvmasm.__ir
(with deprecated legacy alias). (#2931) - New CMake option
COMPILE_D_MODULES_SEPARATELY
builds D files in the DDMD frontend separately to reduce the time required to build LDC with many CPU cores and/or for iterative development. (#2914)
- Supports LLVM 3.9 - 7.0.
- Alpine linux/x64: built against Musl libc to support Docker images based on the Alpine distro, requires the
llvm5-libs
,musl-dev
,binutils-gold
andgcc
packages to build and link D apps and thetzdata
andcurl-dev
packages for certain stdlib modules.
- 32-bit Android/ARM regression introduced in v1.12. (#2892)
- Non-Windows x86_64 ABI fixes wrt. what's passed in registers, relevant for C[++] interop. (#2864)
- Alignment of
scope
allocated class instances. (#2919)
- Frontend, druntime and Phobos are at version 2.082.1. (#2818, #2837, #2858, #2873)
- Significant performance improvements for some transcendental
std.math
functions in single and double precision, at least for x86. (dlang/phobos#6272 (comment))
- Significant performance improvements for some transcendental
- Support for LLVM 7, which is used for the prebuilt packages. Due to an LLVM 7.0.0 regression, the prebuilt x86[_64] LDC binaries require a CPU with SSSE3, and so will your optimized binaries (unless compiling with
-mattr=-ssse3
). (#2850) - JIT compilation: new
ldc.dynamic_compile.bind
function with interface similar to C++std::bind
, allowing to generate efficient specialized versions of functions (much like Easy::jit for C++). (#2726) - LTO now working for Win64 too; the prebuilt package includes the required external LLD linker and the optional LTO default libs. Enable as usual with
-flto=<thin|full> [-defaultlib=druntime-ldc-lto,phobos2-ldc-lto]
. (#2774) - Config file: new
lib-dirs
array for directories to be searched for libraries, incl. LLVM compiler-rt libraries. (#2790)
- Supports LLVM 3.7 - 7.0.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
- Alpine linux/x64: built against Musl libc to support Docker images based on the Alpine distro, requires the
llvm5-libs
,musl-dev
, andgcc
packages to build and link D apps and thetzdata
andlibcurl
packages for certain stdlib modules. - Android/ARM: This release slightly changes the way emulated TLS is interfaced, but is missing a patch for 32-bit ARM. See the wiki for instructions on patching that file manually before cross-compiling the runtime libraries for 32-bit Android/ARM.
- Fix IR-based PGO on Windows (requires our LLVM fork). (#2539)
- Fix C++ class construction with D
new
on Posix. (#2801) - Android: No more text relocations in Phobos zlib, required for API level 23+. (#2822, #2835)
- Declare extern const/immutable globals as IR constants. (#2849, #2852)
- Fix issue when emitting both object and textual assembly files at once (
-output-o -output-s
). (#2847) - Support address of struct member as key/value in AA literal. (#2859, #2860)
- Fix ICE when computing addresses relative to functions/labels. (#2865, #2867)
- Frontend, druntime and Phobos are at version 2.081.2. (#2752, #2772, #2776, #2791, #2815)
- Add some support for classes without TypeInfos, for
-betterC
and/or a minimal (d)runtime. (#2765)
- Add some support for classes without TypeInfos, for
- LLVM for prebuilt packages upgraded to v6.0.1. The x86_64 packages feature some more LLVM targets for cross-compilation (experiments): MIPS, MSP430, RISC-V and WebAssembly. (#2760)
- Rudimentary support for compiling & linking directly to WebAssembly. See the dedicated Wiki page for how to get started. (#2766, #2779, #2785)
- AArch64 (64-bit ARM) now mostly working on Linux/glibc and Android. Current
ltsmaster
/0.17.6 is able to bootstrap v1.11, which can also bootstrap itself; most tests pass. (Preliminary) CI has been set up. (#2802, #2817, #2813) - LDC on Windows now uses 80-bit compile-time
real
s. This allows for seamless cross-compilation to other x86(_64) targets, e.g., withoutreal.min
underflowing to 0 andreal.max
overflowing to infinity. (#2752) - New
@naked
UDA inldc.attributes
& enhanced functionality for@llvmAttr("<name>")
. (#2773)
- Supports LLVM 3.7 - 6.0.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
extern(C++)
on Posix: Pass non-PODs indirectly by value. (#2728)extern(C++)
on Windows/MSVC: Methods return all structs via hidden sret pointer. (#2720, #1935)- Make GC2Stack IR optimization pass work as intended. (#2750)
- Work around inline assembly regression with LLVM 6 on Win32. The prebuilt Win32 package is now using LLVM 6.0.1 too. (#2629, #2770)
- Fix overzealous check for multiple
main()
functions. (#2778) - Fix corrupt prefix in integrated LLD's console output. (#2781)
- No context ptr for nested non-
extern(D)
functions. (#2808, #2809)
- Frontend, druntime and Phobos are at version 2.080.1. (#2665, #2719, #2737)
- No support for Objective-C class/static methods yet. (#2670)
- Breaking Win64
extern(D)
ABI change: Pass vectors directly in registers, analogous to the MS vector calling convention. (#2714) - Config file: For cross-compilation, support additional sections named as regex for specific target triples, e.g.,
"86(_64)?-.*-linux": { … };
; see the comment inetc/ldc2.conf
. (#2718)
- Supports LLVM 3.7 - 6.0.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
- CMake and druntime fixes for DragonFlyBSD, thanks Diederik! (#2690, #2691, #2692, ldc-developers/druntime#138, ldc-developers/druntime#139, ldc-developers/phobos#64)
- DMD-style inline asm label naming issue in overloaded functions. (#2667, #2694)
- Linux: misc. exception stack trace fixes & extensions, incl. default DWARF v4 debuginfo emission with LLVM 6. (#2677)
- Predefine version
D_HardFloat
instead ofD_SoftFloat
for-float-abi=softfp
. (#2678) - Bash completion installed to the wrong place with custom
CMAKE_INSTALL_PREFIX
. (#2679, #2179, #2693) - Default to
ld.gold
linker for ThinLTO on Linux. (#2696) - Fix compilation issues on 64-bit macOS with DMD host compiler ≥ 2.079. (#2703, #2704)
- druntime: Fix
core.stdc.stdint.(u)int64_t
on 64-bit macOS etc. (#2700) - Define
D_AVX
andD_AVX2
if the target supports them. (#2711) - Fix sporadic front-end segfaults. (#2713)
- Win64: Fix
extern(C++)
ABI wrt. passing small non-POD structs by value. (#2706) - Misc. druntime/Phobos fixes and upstream cherry-picks for ARM, AArch64, MIPS etc.
- Fix potential LDC crashes when returning static array results from inline IR. (#2729)
- Win64: Fix terminate handler for VC runtime DLL version 14.14.x.y. (#2739)
- Frontend, druntime and Phobos are at version 2.079.1, incl. new switches
-i[=<pattern>]
(include imports in compilation) and-Xi
. (#2587)- Support a minimal (d)runtime. (#2641)
- Win32 breaking ABI change: add extra underscore for mangled names of D symbols. (#2598)
- No breaking ABI change for 64-bit macOS wrt. C++ mangling of D
(u)long
. It's still mangled as C++(unsigned) long
in order not to breaksize_t
andptrdiff_t
interop, whereas DMD 2.079 mangles it as(unsigned) long long
(which, in combination with missingcore.stdc.config.cpp_(u)long
, makes it impossible to represent a C++ size_t/ptrdiff_t with DMD 2.079 on 64-bit macOS).
- Support for LLVM 6. It's used for the prebuilt packages, except for the 32-bit Windows package (due to #2629). (#2608)
- Integrated LLD (enable with
-link-internally
) now also able to (cross-)link ELF and Mach-O binaries, in addition to the existing Windows COFF support. (#2203) - Prebuilt Linux and macOS packages now ship with LTO default libs (druntime & Phobos). Keep on using
-flto=<thin|full>
to restrict LTO to your code, or opt for-flto=<thin|full> -defaultlib=phobos2-ldc-lto,druntime-ldc-lto
to include the default libs. (#2640) - When linking against shared default libs, LDC now sets a default rpath (absolute path to the LDC lib dir(s); configurable in the
etc/ldc2.conf
file). (#2659) - New convenience mixin for fuzzing:
ldc.libfuzzer.DefineTestOneInput
. (#2510)
- Supports LLVM 3.7 - 6.0.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
- DMD-style inline asm:
- Fix semantics of
extended ptr
for MSVC targets. (#2653) - Add missing EIP register. (#2654)
- Fix semantics of
- macOS: Fix install_name and symlinks of shared fat druntime/Phobos libs. (#2659, #2615)
- Make
-static
override-link-defaultlib-shared
. (#2646) - Make interface thunks forward variadic args. (#2613)
- Fix
va_arg()
for PowerPC. (ldc-developers/druntime#121) - MSVC: Support exporting naked functions. (#2648)
- Only emit interface vtables in the declaring module. (#2647)
- Call
_Unwind_Resume()
directly. (#2642)
- Frontend, druntime and Phobos are at version 2.078.3, incl. new switches
-dip1008
and-transition=<intpromote|16997>
as well aspragma(crt_{con,de}structor)
. (#2486) - New switch
-link-defaultlib-shared
to link against shared druntime/Phobos. It defaults to true for shared libraries (-shared
), so it's primarily useful for executables. (#2443) - Support for plugins via
-plugin=...
(see this example). The mechanism is identical to Clang's LLVM-IR pass plugins and thus supports those as well, e.g., the AFLfuzz LLVM-mode plugin, Easy::Jit. (#2554) - Support for LLVM IR-based Profile-Guided Optimization via
-fprofile-{generate,use}
(not working on Windows yet). (#2474) - Basic support for LLVM XRay instrumentation via
-fxray-{instrument,instruction-threshold}
. (#2465) - DMD-style function trace profiling via
-profile
(LDMD) /-fdmd-trace-functions
(LDC). (#2477) - New UDA
ldc.attributes.assumeUsed
to prevent a symbol from being optimized away. (#2457) - The PGO helper library
ldc-profile-rt
was replaced by LLVM's vanilla profiling library. Our subset of LLVM compiler-rt libraries is now also shipped on Windows (excl. fuzzer). (#2527, #2544) - Cherry-picked upstream Musl C runtime support for Docker images based on Alpine and added a native Alpine/x64 compiler, which requires the
llvm5
,musl-dev
, andgcc
packages to run and link D apps and thetzdata
andlibcurl
packages for certain stdlib modules.
- Supports LLVM 3.7 - 5.0.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
- Strict left-to-right evaluation/load order of function arguments. (#2450, #2502)
- Inline asm silently ignores opcodes db, ds, di, dl, df, dd, de. (#2548)
- Missed optimization for
scope
allocated classes. (#2515, #2516) - Don't eliminate frame pointer by default at
-O0
. (#2480, #2483) - LLVM complaining about invalid IR pointer arithmetics. (#2537)
llvm_expect()
doesn't work with CTFE. (#2458, #2506).{so,dylib}
file command line arguments should be forwarded to linker. (#2445, #2485)- macOS: Set shared stdlib install_name to
@rpath/<filename>
. (#2442, #2581) array ~= element
issue if rhs affects the lhs length. (#2588, #2589)- EH segfaults when checking D class catch handlers against thrown C++ exception. (#2590)
- Frontend, druntime and Phobos are at version 2.077.1. (#2401, #2430)
- C++ exceptions can now be caught in D code, for Linux and MSVC targets (and possibly more). A logical step after consolidating LDC's exception handling for non-MSVC targets with DMD's DWARF implementation. (#2405)
- Automated building of release and CI packages. (#2438)
- Supports LLVM 3.7 - 5.0. (binary packages on GitHub are built with LLVM 5.0.1)
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
- ICE on chained ref-returning opIndex op-assign. (#2415)
- Windows:
export
visibility ignored for globals. (#2437) - Print error message when trying to use shared libraries with static runtime. (#2454)
- ldc-1.7.0-beta1 regression: ICE with implicit cast. (#2471)
- CMake: use llvm-config to determine LLVM's cmake directory, if possible. (#2482)
- Frontend, druntime and Phobos are at version 2.076.1 (#2362), including
-betterC
semantics (#2365). - Experimental support for dynamic codegen at runtime (JIT-style) to tune performance-critical parts for the used CPU and/or treat special runtime variables as constants. See UDAs
@dynamicCompile
,@dynamicCompileConst
inldc.attributes
; compile with command-line option-enable-dynamic-compile
and use theldc.dynamic_compile
module to generate the code at runtime before invoking it. Congratulations to Ivan Butygin for implementing this non-trivial feature! (#2293) - Many
std.math
functions are now CTFE-able. (#2259)
- Supports LLVM 3.7 - 5.0.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
- Can't link against wsock32 and ws2_32 on Windows. (#468)
- PGO incompatible with MSVC EH. (#1943)
- Regression: ModuleInfos not emitted as COMDATs. (#2409)
- Incorrect C assert function signature for Android. (#2417)
- Overzealous error check when attempting to evaluate object as constant. (#2422)
- Frontend, druntime and Phobos are at version 2.075.1. (#2252)
- New command-line option
-fp-contract
to control fused floating-point math, as well as about 25 new hidden options influencing codegen, see-help-hidden
(-enable-unsafe-fp-math
,-debugger-tune
etc.). (#2148) - New command-line option
-linker
. Use-linker=lld-link
to use an external LLD executable for MSVC targets (with experimental LTO support) or-linker=<gold|bfd|lld>
for other targets. (#2386)
- Win32: the mangled names of D symbols now start with
_D
, not with__D
, compatible with DMD. (#2353)
- Supports LLVM 3.7 - 5.0.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017.
- LLVM upgraded to 5.0.0.
- Cyclic dependencies with
-cov
. (#2177) - ICE when capturing
this
in constructors. (#1728) - Objective-C bugs. (#2387, #2388)
- LLVM/LLD 5.0:
-link-internally
broken. (LLD patch) - LLVM 5.0: need to build LDC with CMake option
-DLDC_WITH_LLD=OFF
to avoid conflicting command-line options. (#2148) - LLVM 5.0 & non-Windows targets: names of members in static libraries generated by LDC's internal archiver contain path information. (#2349)
Workaround for Xcode 9 ranlib bug: don't use internal (LLVM) archiver by default for OSX targets. (#2350)Xcode 9.0.1 fixes that bug, please upgrade.- Captured lazy parameters may be garbage. (#2302, #2330)
- Packed struct layout regression (#2346) and
T.alignof
not respecting explicit type alignment viaalign(N)
. (#2347) - OSX and Win32: mangling issue for druntime's
rt_options
. (#1970, #2354) - MinGW Win64: ABI regression wrt. functions returning x87 reals. (#2358)
- Potential file permission problem when copying over LLVM libraries during LDC build. (#2337)
- PPC64: Forward reference error with 1.3 release. (#2200)
- LLVM 5.0: potentially failing LLVM assertion when emitting debuginfos and using inlining at the same time. (#2361)
- Frontend, druntime and Phobos are at version 2.074.1. (#2076)
- ldc-build-runtime: a small D tool that makes it easy to compile the LDC runtime and standard library yourself, for example, to enable LTO-ability/sanitizers or cross-compiling executables and shared libraries for other platforms, like Android/ARM. (Wiki page)
- @joakim-noah's Android fixes have finally been fully incorporated, enabling every host to (cross-)compile to Android. (https://github.com/ldc-developers/llvm/commit/8655f3208cce28bb7f903cadf5f58a3911392bdc) Instructions on using this ldc release to cross-compile D apps for Android are on the wiki, including how to try out the native Android/arm package, ie a D compiler that you can run on your Android smartphone or tablet.
- Improved support for AddressSanitizer. LDC will automatically link with the AddressSanitizer runtime library when
-fsanitize=address
is passed (when LDC can find the AddressSanitizer library). - libFuzzer sanitizer support using
-fsanitize=fuzzer
(same as Clang). This flag implies-fsanitize-coverage=trace-pc-guard,indirect-calls,trace-cmp
and automatically links-in the runtime libFuzzer library if LDC can locate the runtime library. (With LLVM 4.0, there is a dependency on sanitizer runtime, so manually link the ASan library or use-fsanitize=fuzzer,address
.) - New
-fsanitize-blacklist=<file>
command-line option to exclude functions from sanitizer instrumentation (identical to Clang). The file must adhere to the textual Sanitizer Special Case List format. - New
-fsanitize-coverage=...
command-line option with the same functionality as Clang. - The config file sections now feature an additional
post-switches
list for switches to be appended to the command line (the existingswitches
list is prepended). E.g., this now allows the user to override the directory containing the runtime libraries via-L-L/my/runtime/libs
in the command line. (#2281)
- The
-sanitize
command-line option has been renamed to-fsanitize*
, for clang conformance. - The semantics of an empty
-conf=
command-line option have been changed from 'use default config file' to 'use no config file'. - The binary representations of the init values for
float/double/real
have been unified to a special quiet NaN, with both most significant mantissa bits set, on all hosts and for all targets. (#2207)
- Supports LLVM 3.7 - 5.0. Support for 3.5 and 3.6 has been dropped.
- Windows: Supports Visual Studio/C++ Build Tools 2015 and 2017, incl. the latest Visual Studio 2017 Update 15.3.
- Consistent usage of a minimally tailored LLVM 4.0.1.
- Newly enabled LLVM target
NVPTX
in order to target CUDA via DCompute. - Linux x86_64:
- Shipping with the LLVM LTO plugin for the
gold
linker. On Ubuntu 14.04 and later,-flto=full|thin -Xcc=-fuse-ld=gold
should work out of the box. - Build environment upgraded from Ubuntu 12.04 and gcc 4.9 to Ubuntu 14.04 and gcc 6.3.
- Shipping with the LLVM LTO plugin for the
- Windows/MSVC: Build environment upgraded from Visual Studio 2015 Update 3 to Visual Studio 2017 15.3.3 (WinSDK 10.0.15063).
- Misc. debuginfo issues, incl. adaptations to internal LLVM 5.0 changes: (#2315)
ref
parameters and closure parameters declared with wrong address and hence potentially showing garbage.- Win64: parameters > 64 bit passed by value showing garbage.
- Win64: debuginfos for closure and nested variables now finally available starting with LLVM 5.0.
- LLVM error
Global variable initializer type does not match global variable type!
forT.init
with explicit initializers for dominated members in nested unions. (#2108) - Inconsistent handling of lvalue slicees wrt. visible side-effects of slice lower/upper bound expressions. (#1433)
- Misc. dcompute issues. (#2195, #2215)
- Potential LDC crashes due to dangling pointers after replacing IR globals (required in some cases if the type contains unions) almost fully mitigated. (#1829)
- Multiple arrayop function emissions. (#2216)
- Potentially incorrect memory layout for unnaturally aligned aggregates. (#2235)
- Wrong
-m32/64
in command-line for external ARM assembler used via-no-integrated-as
.
- Misc. CI improvements:
- Addition of high-performant SemaphoreCI (incl. enabled LLVM/LDC assertions).
- CircleCI upgraded to 2.0, testing with latest gcc.
- Compile all D files for (non-unittest) druntime/Phobos at once. May be disabled via CMake option
COMPILE_ALL_D_FILES_AT_ONCE=OFF
. (#2231)
- ThinLTO may not work well with the
ld.bfd
linker, useld.gold
instead (-Xcc=-fuse-ld=gold
). - When building with LLVM 5.0, you may need
-DLDC_WITH_LLD=OFF
in the CMake command line. Otherwise, if the LLD headers are available and LDC is built with LLD integration, the produced LDC binary will refuse to work due to conflicting command-line options.
- Frontend, druntime and Phobos are at version 2.073.2.
- A first experimental version of DCompute for OpenCL/CUDA targets has landed. See announcement.
- LLVM 3.9+: Experimental integration of LLD, the LLVM cross-linker, for MSVC targets. Check out these hassle-free instructions to make LDC emit Windows executables and DLLs on any host! (#2142)
- libconfig was replaced by an ad-hoc parser (in D), getting rid of the build and runtime dependency and shrinking the license file by roughly 50%. Thanks again, Remi! (#2016)
- LDC now ships with static and shared runtime libs on supported platforms. (#1960)
- LLVM 3.9+: Static libraries are now generated by LDC (LLVM) by default, not by system
ar
orlib.exe
. This means that LDC can cross-compile and -archive static libs for all supported targets. Command-line option-ar
allows specifying an external archiver to be used. (#2030) - New command-line options
-dip1000
,-mv
and-mscrtlib
(#2041). - Ships with dlang tools rdmd, ddemangle and dustmite.
- LLVM 4.0+: Output LLVM optimization records via
-fsave-optimization-record
. (#2089) - New
-Xcc
command-line option for C compiler flags when linking via gcc/clang. Thanks Adrian! (#2104) - New function UDA
@ldc.attributes.llvmFastMathFlag("contract")
that specifically enables floating point operation fusing (fused multiply-add), previously only achievable with@fastmath
. (#2060)
- Supports LLVM 3.5 - 4.0.
- Additional LLVM targets have been enabled for the prebuilt x86_64 packages: ARM, AArch64 and PowerPC.
- Windows: Supports Visual Studio/Build Tools 2015 and 2017. (#2065)
- NetBSD: The 2.074 druntime patches have been cherry-picked.
- LTO flags leaking into standard libraries when building LDC with LTO. (#2077)
- Debug info fixes for class types - thanks Elie! (#2130)
- OSX: Incomplete backtrace. (#2097)
- Phobos on ARM: alignment and 64-bit
real
issues. (#2024) - Windows: EH-related crashes when linking against shared MS runtimes. (#2080)
- ICE when initializing vector with
TVector.init
. (#2101) - Weird object file type autodetection. (#2105)
- Typesafe variadics emitted as LLVM variadics. (#2121)
- Superfluous masking of
bool
values. (#2131) - Output for
-mcpu=help
or-mattr=help
printed multiple times. (#2073) - LDMD refuses some duplicate command-line options. (#2110)
- Change format of predefined versions output for DMD compatibility. (#1962)
- Fix potential segfault when formatting error msg (#2160)
- Fix ICE when using
-main -cov
(#2164) - Make inlining threshold customizable via (existing)
-inline-threshold
, fix performance decrease with-boundscheck=off
(#2161, #2180) - Switch Android onto the sectionELF style of module registry (#2172)
- Check fiber migration on Android/ARM too (ldc-developers/druntime#97)
- Android moduleinfo section druntime fix (ldc-developers/druntime#98)
- Building LDC requires a preinstalled D compiler.
- LDC now features D unittests itself. Just add some to LDC's D modules and they'll be compiled and executed by CI. (#2016)
- Frontend, druntime and Phobos are at version 2.072.2.
- New function attribute
@ldc.attributes.allocSize
(#1610), see https://wiki.dlang.org/LDC-specific_language_changes#.40.28ldc.attributes.allocSize.29
- Supports LLVM 3.5 - 4.0.
- Exception backtrace robustness has been significantly improved.
- Emission of
reals
with differing precision to the host platform'sreal
has been fixed.
(The compiler still uses the host platform's D real type to represent compile-time floating-point values, so parsing of literals and CTFE is restricted to the host real precision. For instance, LDC on AArch64 with its quad-precision reals would now make for a universal cross-compiler. On the other hand, cross-compiling from ARM to x86 with 80 bit reals still does not work – for example,real.max
would silently overflow at compile-time and be emitted as 80-bit infinity.)
- Compilation error with DMD 2.074 host compiler.
- LLVM error when accessing
typeid(null)
(#2062). - Some LLVM intrinsics not available for LLVM ≥ 4.0 (#2037).
- Spurious crashes on OS X user program shutdown when linking against static druntime lib.
- Lexing floating-point literals may fail on PowerPC (#2046).
- LDC crashes when trying to repaint static arrays (#2033).
- No stack trace on Linux (#2004) and Windows (#1976, ldc-developers/druntime#85).
- Generated documentation file is immediately deleted when compiling at the same time.
- LDMD doesn't append default file extension if
-of
option doesn't contain any (#2001, #2002).
- Building LDC requires a preinstalled D compiler.
- Linux: Always build C parts of standard library as PIC (#2009). This makes the binary packages usable on Ubuntu 16.10 (where executables are linked as position-independent code by default, in contrast to the older system used for preparing the packages).
- Frontend, druntime and Phobos are at version 2.071.2.
- Link-Time Optimization (LTO) with
-flto={thin|full}
(LLVM ≥ 3.9). LTO requires linker support and is therefore currently only supported on Linux (ld.gold
with LLVM plugin) and OS X. For more details, please refer to LLVM's and Clang's documentation, for example Clang's ThinLTO documentation. (#1840) - Experimental cross-module inlining (#1577, enable with
-enable-cross-module-inlining
) - Profile-guided optimization (PGO) (#1219)
- Windows: enable C-style DLL exports/imports via
export
(functions only) (#1856) - Experimental IR-to-obj caching with
-cache=<cache dir>
(#1572, #1753, #1812, #1893) - Accept bitcode files on commandline (#1539)
@ldc.attributes.fastmath
for aggressive math optimization (#1472, #1438)- Binary distribution now bundles DUB (v1.2.0) (#1573)
- Breaking changes to command-line semantics (see http://forum.dlang.org/post/[email protected]).
- New traits
__traits(targetCPU)
and__traits(targetHasFeature, )
(#1434) - Drastic reduction of large symbol name lengths with optional
-hash-threshold
(#1445) @ldc.attributes.optStrategy(...)
for per-function optimization setting (#1637)- Extend intrinsic
llvm_memory_fence
for single-thread fences (#1837) - Add function instrumentation and profiling options via
-finstrument-functions
(#1845) - Add line-tables-only debuginfo via
-gline-tables-only
(#1861) - Implement DMD-compatible
-betterC
(#1872)
- Supports LLVM 3.5 - 3.9 and current 4.0 release candidate.
- ABI fixes, mainly for PowerPC targets. For bootstrapping, make sure to use source branch
ltsmaster
or the latest 0.17.x release, as all existing LDC releases ≥ 1.0 for PowerPC are unusable. (#1905) - Added ARM assembly code for Phobos
std.bigint
. (ldc-developers/phobos#31) - Added some definitions for OpenBSD. (https://github.com/ldc-developers/druntime/commit/1ef83229673f5ae23f6a2a97f8e6b039647fbf87)
- Updates for Solaris (ldc-developers/druntime#71, ldc-developers/druntime#72, ldc-developers/druntime#73, ldc-developers/druntime#74, ldc-developers/druntime#75, ldc-developers/druntime#79)
- Linux: changed default to fully relocatable, position independent code (PIC). Change back to non-relocatable with
-relocation-model=static
. (#1664)
- Potential crash when generating debuginfos for nested variables AND optimizing (#1933, #1963, #1984)
- Alignment and size of critical sections, causing crashes on ARM (#1955, #1956)
-finstrument-functions
using wrong return address (#1961)- Response files expanded too late, preventing cross-compilation on Windows when using dub (#1941, #1942)
- Non-Windows x86_64 ABI bug wrt. returning static arrays (#1925, #1938)
- Some array literals wrongly promoted to constants (#1924, #1927)
- Misc. DUB regressions introduced by beta 3 (#1819)
- Don't output static libs (with relative target filename) in
-od
objects directory (for LDC, but continue to do so for LDMD, for DMD compatibility). - LDMD: avoid object file collisions (due to multiple D source files with identical name in different dirs) when creating a static lib and remove the object files on success, mimicking DMD.
- Create output directories recursively.
- Don't output static libs (with relative target filename) in
- Potential ICE when building vibe.d projects (#1741)
- ICE when calling an abstract function. (#1822)
- ICE for invalid
__asm
constraints. (#802) - Wrong code for LLVM inline assembly returning a tuple (
__asmtuple
). (#1823) - Potential ICE wrt. captured variables. (#1864)
- ARM: ICE when using LTO. (#1860)
- Union layout and initialization, fixing the compilation of DMD (#1846, fixing most cases of #1829)
- Allow custom file extension for .ll/.bc./.s output files. (#1843)
- Windows: produced binaries with debuginfos are now large-address-aware too. (#442, #1876)
- Fix debuginfos for parameters. (#1816)
- Allow alignment of global variables < pointer size. (#1825)
- Promote more immutable array literals to LLVM constants. (#506, #1821, #1838)
- ICE when incrementing a complex variable. (#1806)
llvm.va_start
not matched withllvm.va_end
(#1744)- ldmd2 ignores -od option for libraries. (#1724)
- ICE: toConstElem(CastExp) doesn't support NewExp as cast source. (#1723)
- Mark runtime intrinsic shims as pragma(inline, true). (#1715)
- pragma(inline, false) is incompatible with store/loadUnaligned. (#1711)
- ICE: function not fully analyzed; previous unreported errors compiling std.variant.VariantN!(16LU, int, string).VariantN.__xopEquals? (#1698)
- Segfault at at ldc/ldc-1.1.0/driver/main.cpp:1351. (#1696)
- Make sure MSVC Build Tools are automatically detected by LDC. (#1690)
- Update Windows README.txt. (#1689)
- [ldc2-1.1.0-beta2] Missing symbol with inlining enabled. (#1678)
- [REG ldc-1.1.0-beta2] ICE with templated classes. (#1677)
- FreeBSD: Fix shared library build, working Hello World. (#1673)
- Strange compile time error. (#1638)
- LDC+DUB on Windows: folder separator is ignored. (#1621)
- Fix evaluation order issues. (#1620, #1623)
- Ubuntu 16.10 linker failures due to PIE by default (relocation R_X86_64_32S … can not be used). (#1618)
- ICE on returning struct with zero-length static array. (#1611)
- Debug info generation fixes for LLVM >= 3.8. (#1598)
- ICE after return in the middle of a function on Win64/MSVC. (#1582)
- Enums with referenced struct members result in floating point error. (#1581)
pragma(inline, {true|false})
is no longer ignored (#1577)- Static array initialization with single element misdetected as direct construction via sret. (#1548)
- ICE on static typeid. (#1540)
- super doesn't work. (#1450)
- Sub-expression evaluation order fixes. (#1327)
- Add suffix to LTO linker plugin name to disambiguate with LLVM installation. (#1898)
- LDC now requires a preinstalled D compiler. (Versions
0.17.*
and theltsmaster
branch can be used to 'bootstrap' a build when only a C++ compiler is available.) - On Unix-like systems we now use gcc for linking. (#1594)
- optimizer: Skip adding verifier function pass if
-disable-verify
is given. (#1591) - DValue refactoring. (#1562)
- Several improvements to generated IR. (#1528, #1630)
- The vtable's of inherited interfaces are now put between the class's _monitor field and the user data fields. (https://issues.dlang.org/show_bug.cgi?id=15644)
- Frontend, druntime and Phobos are at version 2.070.2.
- Support for LLVM 3.5 - 3.8 and preliminary support for LLVM 3.9.
- Objective-C Support. (#1419)
- ARM platform is now fully supported. (#1283, #489)
- Better support for Android. (#1447)
- Preliminary support for AArch64.
- Outdated Copyright notice in LICENSE file. (#1322)
- libconfig.so.8 not found (ubuntu 14.04) (#1460)
- Wrong template filter on atomicOp. (#1454)
- Runtime error on synchronized(typeid(SomeInterface)) { }. (#1377)
- TypeInfo is stored read-only, but mutable from D. (#1337)
- Inline assembly regression with local variable references. (#1292)
- Compile error on Linux/PPC and Linux/PPC64 due to missing import in Phobos.
- LDC now requires a preinstalled D compiler.
- Building on OS X requires ld64-264 or above (shipping with Xcode 7.3). This avoid spurious crashes during exception handling. XCode 7.3.1 should be used to avoid linker errors. (#1444, #1512)
- Linking against LLVM shared library is now supported.
- Added support for LLVM 6.0 and 7.0. (#2600, #2825)
- Backported AArch64 fixes from master; most tests passing on Linux/glibc and Android. (#2575, #2811, ldc-developers/phobos#49, ldc-developers/phobos#50, ldc-developers/phobos#51, ldc-developers/phobos#52, ldc-developers/phobos#53, ldc-developers/phobos#54, ldc-developers/phobos#55, ldc-developers/phobos#56)
- Fix generation of debug info. (#2594)
- Added support for bootstrapping on DragonFly BSD. (#2580, #2593, #2689, ldc-developers/druntime#110, ldc-developers/phobos#45)
- Fixed missing definition in
std.datetime
on Solaris. (ldc-developers/phobos#46) - Fixed
std.datetime
unittest failure. (ldc-developers/phobos#59) - Fixed tests for PowerPC. (#2634, #2635)
- Improvements for MIPS.
- Make
core.stdc.stdarg.va_*
functionsnothrow
to enable compiling the 2.082 frontend. (#2821) - CI updates.
- Added LLVM 5.0 support.
- druntime: fixes for Android and addition of
core.math.yl2x[p1]()
for x86(_64) targets. - dmd-testsuite: backported
runnable/cppa.d
fix for GCC > 5. - CI updates.
- Added LLVM 4.0 support.
- Full stdlib and dmd testsuite passes on Android/ARM.
- Fixes for PPC64-LE, MIPS64 and ARM/AArch64 ABIs (#1905)
- Support for LLVM 3.5 - 3.9.
- Fixed soft float and hard float issues on ARM.
- Fixed ABI error on Linux/PPC and Linux/PPC64.
- Fixed error in
core.stdc.stdarg
on Linux/PPC and Linux/PPC64. - Fixed issue with
__tls_get_addr
on Linux/PPC and Linux/PPC64.
- ARM platform is now a first class target for LDC. It passes most test cases (except 2 failures) and can successfully compile the D version of the compiler.
- ARM platform is now fully supported. (#1283, #489)
- Preliminary support for AArch64.
- Preliminary support for LLVM 3.9.
- Inline assembly regression with local variable references. (#1292)
- Compile error on Linux/PPC and Linux/PPC64 due to missing import in Phobos.
- Linking against LLVM shared library is now supported.
- Frontend, druntime and Phobos are at version 2.068.2.
- The exception handling runtime now no longer allocates GC memory (although it still uses C
malloc
if there are more than 8 concurrent exceptions or nestedfinally
blocks per thread). Note: Creating theThrowable
s in user code (e.g.new Exception("…")
) and theRuntime.traceHandler
may GC-allocate still. (Thanks for this goes to our newest contributor, @Philpax). - The
@ldc.attributes.section("…")
attribute can now be used to explicitly specify the object file section a variable or function is emitted to. - The
@ldc.attributes.target("…")
attribute can now be used to explicitly specify CPU features or architecture for a function. - The
-static
option can be used to create fully static binaries on Linux (akin to the GCC option of the same name). core.atomic.atomicOp()
now exploits LLVM read-modify-write intrinsics instead of using a compare-and-swap loop. As side-effect, the atomic intrinsics in moduleldc.intrinsics
have been renamed:llvm_atomic_cmp_swap
=>llvm_atomic_cmp_xchg
llvm_atomic_swap
=>llvm_atomic_rmw_xchg
llvm_atomic_load_*
=>llvm_atomic_rmw_*
- Improved ARM support. (#1280)
- The compiler now supports NetBSD. (#1247) (Thanks for this goes to @nrTQgc.)
- The float ABI can now be derived from the second field of the triple. E.g. the hardfloat ABI is used if triple
armv7a-hardfloat-linux-gnueabi
is given. (#1253) - Support for fibers on AArch64.
- Support for LLVM 3.8 and preliminary support for LLVM 3.9
- make install problem. (#1289)
- When a class contains a union, other fields are not statically initialized. (#1286)
- Compiling DCD with -singleobj causes segmentation fault. (#1275)
- 0.17.0-beta2: Cannot build DCD. (#1266)
- Invalid bitcast error. (#1211)
- 0.16.0-beta1: Trivial program fails on FreeBSD. (#1119)
- Can't build gtk-d 3.1.4. (#1112)
- x86 ABI: Fix Solaris regression and work around MSVC byval alignment issue. (#1230)
- Atomic RMW operations emit subpar x86 assembly. (#1195)
- align() not respected for local variable declarations. (#1154)
- Codegen optimizations are no longer disabled when
-g
is given. (75b3270a) - Debug information is now generated for
ref
andout
parameters. (#1177) core.internal.convert
tests do not depend onreal
padding bytes any longer. (#788)
- LDC now requires LLVM 3.5–3.8 and thus also a C++11-capable compiler to build.
- The LDC-specific parts of the source code have received a big overhaul to make use of some C++11 features and to unify the style (the LLVM style as per
clang-format
is now used). - The groundwork for a code generation test suite working on the LLVM IR level has been laid, together with some first test cases for alignment issues.
- LDC now emits more optional LLVM IR attributes for more optimization opportunities. (#1232)
- LDC does not zero the padding area of a real variable. This may lead to wrong results if the padding area is also considered. See #770. Does not apply to real members inside structs etc.
- Phobos does not compile on MinGW platform.