From f5f17bee6f865e1059c891a6609110e0bc6b6f45 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 9 Mar 2018 01:01:31 +0100 Subject: [PATCH 01/24] Add support for LLD 6.0.0 --- CMakeLists.txt | 20 ++++++++++++++++---- driver/linker-msvc.cpp | 8 ++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c4d7fe0345..eeed6832ea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -428,7 +428,11 @@ if(NOT DEFINED LDC_WITH_LLD) set(CMAKE_REQUIRED_FLAGS -std=c++11) endif() set(CMAKE_REQUIRED_INCLUDES ${LLVM_INCLUDE_DIRS}) - CHECK_INCLUDE_FILE_CXX(lld/Driver/Driver.h LDC_WITH_LLD) + if(NOT (LDC_LLVM_VER LESS 600)) + CHECK_INCLUDE_FILE_CXX(lld/Common/Driver.h LDC_WITH_LLD) + else() + CHECK_INCLUDE_FILE_CXX(lld/Driver/Driver.h LDC_WITH_LLD) + endif() unset(CMAKE_REQUIRED_FLAGS) unset(CMAKE_REQUIRED_INCLUDES) else() @@ -544,10 +548,18 @@ add_custom_target(${LDMD_EXE} ALL DEPENDS ${LDMD_EXE_FULL}) # LLVM flags into account. set(LDC_LINKERFLAG_LIST "${SANITIZE_LDFLAGS};${LLVM_LIBRARIES};${LLVM_LDFLAGS}") if(LDC_WITH_LLD) - if(MSVC) - list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCore.lib lldDriver.lib) + if(NOT (LDC_LLVM_VER LESS 600)) + if(MSVC) + list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCommon.lib lldCore.lib lldDriver.lib LLVMWindowsManifest.lib) + else() + set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCommon;-llldCore;-llldDriver;-lLLVMWindowsManifest;${LDC_LINKERFLAG_LIST}") + endif() else() - set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST}") + if(MSVC) + list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCore.lib lldDriver.lib) + else() + set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST}") + endif() endif() endif() diff --git a/driver/linker-msvc.cpp b/driver/linker-msvc.cpp index bc187e05fd..70695f90d5 100644 --- a/driver/linker-msvc.cpp +++ b/driver/linker-msvc.cpp @@ -18,8 +18,12 @@ #include "llvm/Support/FileSystem.h" #if LDC_WITH_LLD +#if LDC_LLVM_VER >= 600 +#include "lld/Common/Driver.h" +#else #include "lld/Driver/Driver.h" #endif +#endif ////////////////////////////////////////////////////////////////////////////// @@ -194,7 +198,11 @@ int linkObjToBinaryMSVC(llvm::StringRef outputPath, bool useInternalLinker, const auto fullArgs = getFullArgs("lld-link.exe", args, global.params.verbose); +#if LDC_LLVM_VER >= 600 + const bool success = lld::coff::link(fullArgs, /*CanExitEarly=*/false); +#else const bool success = lld::coff::link(fullArgs); +#endif if (!success) error(Loc(), "linking with LLD failed"); From 7d3e27bc4da8d32998e6afc620d33405cbac00e0 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 9 Mar 2018 19:47:52 +0100 Subject: [PATCH 02/24] Travis: Add LLVM 6.0.0 Linux job --- .travis.yml | 8 ++++++-- CMakeLists.txt | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index f0e8179192..889f745449 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,13 +6,16 @@ matrix: include: - os: linux d: ldc + env: LLVM_VERSION=6.0.0 + - os: linux + d: ldc-beta env: LLVM_VERSION=5.0.1 OPTS="-DLIB_SUFFIX=64" - os: linux d: ldc - env: LLVM_VERSION=4.0.1 OPTS="-DLIB_SUFFIX=64" + env: LLVM_VERSION=4.0.1 OPTS="-DBUILD_SHARED_LIBS=ON" - os: linux d: ldc-beta - env: LLVM_VERSION=3.9.1 OPTS="-DBUILD_SHARED_LIBS=ON" + env: LLVM_VERSION=3.9.1 OPTS="-DBUILD_SHARED_LIBS=ON -DLIB_SUFFIX=64" - os: linux d: ldc-0.17.5 env: LLVM_VERSION=3.8.1 OPTS="-DBUILD_SHARED_LIBS=OFF -DLIB_SUFFIX=64" @@ -31,6 +34,7 @@ matrix: cache: directories: - llvm-spirv-6.0.0 + - llvm-6.0.0 - llvm-5.0.1 - llvm-4.0.1 - llvm-4.0.0 diff --git a/CMakeLists.txt b/CMakeLists.txt index eeed6832ea..99c8a33752 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -219,6 +219,11 @@ endif() append("${SANITIZE_CXXFLAGS}" LDC_CXXFLAGS) # LLVM_CXXFLAGS may contain -Werror which causes compile errors with dmd source string(REPLACE "-Werror " "" LLVM_CXXFLAGS ${LLVM_CXXFLAGS}) +# LLVM_CXXFLAGS may contain -Werror=unguarded-availability-new which requires +# more recent gcc versions (not supported by 4.9) +if(CMAKE_COMPILER_IS_GNUCXX) + string(REPLACE "-Werror=unguarded-availability-new " "" LLVM_CXXFLAGS ${LLVM_CXXFLAGS}) +endif() if (UNIX AND NOT "${LLVM_LDFLAGS}" STREQUAL "") # LLVM_LDFLAGS may contain -l-lld which is a wrong library reference (AIX) string(REPLACE "-l-lld " "-lld " LLVM_LDFLAGS ${LLVM_LDFLAGS}) From 472cc92c5951c69eae2e944952045ac4773538a6 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 9 Mar 2018 21:13:30 +0100 Subject: [PATCH 03/24] CircleCI & AppVeyor: Switch to preliminary LDC-LLVM 6.0.0 --- .circleci/config.yml | 10 +++++----- appveyor.yml | 22 ++++++++-------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c41b9c9270..77dacabb33 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,7 +52,7 @@ commonSteps: &commonSteps echo "Using LLVM with enabled assertions" assertsSuffix="-withAsserts" fi - curl -L -o llvm.tar.xz https://github.com/ldc-developers/llvm/releases/download/ldc-v$LLVM_VERSION/llvm-$LLVM_VERSION-$CI_OS-x86_64$assertsSuffix.tar.xz + curl -L -o llvm.tar.xz https://github.com/ldc-developers/llvm/releases/download/CI/llvm-8d99668b-$CI_OS-x86_64$assertsSuffix-20180309.tar.xz tar -xf llvm.tar.xz --strip 1 -C llvm-$LLVM_VERSION rm llvm.tar.xz - run: @@ -243,8 +243,8 @@ jobs: - image: ubuntu:14.04 environment: - CI_OS: linux - - LLVM_VERSION: 5.0.1 - - HOST_LDC_VERSION: 1.6.0 + - LLVM_VERSION: 6.0.0 + - HOST_LDC_VERSION: 1.8.0 - EXTRA_CMAKE_FLAGS: "-DMULTILIB=ON -DCMAKE_EXE_LINKER_FLAGS=-static-libstdc++ -DLDC_INSTALL_LTOPLUGIN=ON -DLDC_INSTALL_LLVM_RUNTIME_LIBS=ON" - DUB_VERSION: v1.7.2 build-osx: @@ -255,8 +255,8 @@ jobs: - CI_OS: osx - MACOSX_DEPLOYMENT_TARGET: 10.8 - USE_LIBCPP: true - - LLVM_VERSION: 5.0.1 - - HOST_LDC_VERSION: 1.6.0 + - LLVM_VERSION: 6.0.0 + - HOST_LDC_VERSION: 1.8.0 - BOOTSTRAP_CMAKE_FLAGS: "-DCMAKE_CXX_FLAGS='-stdlib=libc++' -DCMAKE_EXE_LINKER_FLAGS=-lc++" - EXTRA_CMAKE_FLAGS: "-DMULTILIB=ON -DCMAKE_CXX_FLAGS='-stdlib=libc++' -DCMAKE_EXE_LINKER_FLAGS=-lc++" - DUB_VERSION: v1.7.2 diff --git a/appveyor.yml b/appveyor.yml index a020895bf7..a19cae91c2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -12,13 +12,13 @@ environment: matrix: - APPVEYOR_JOB_ARCH: x64 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - LLVM_VERSION: 5.0.1 - HOST_LDC_VERSION: 1.6.0 + LLVM_VERSION: 6.0.0 + HOST_LDC_VERSION: 1.8.0 DUB_VERSION: v1.7.2 - APPVEYOR_JOB_ARCH: x86 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - LLVM_VERSION: 5.0.1 - HOST_LDC_VERSION: 1.6.0 + LLVM_VERSION: 6.0.0 + HOST_LDC_VERSION: 1.8.0 DUB_VERSION: v1.7.2 # scripts that are called at very beginning, before repo cloning @@ -64,15 +64,9 @@ install: - ps: | If (Test-Path Env:HOST_LDC_VERSION) { $ldcVersion = $Env:HOST_LDC_VERSION - If ($Env:APPVEYOR_JOB_ARCH -eq 'x64') { - appveyor DownloadFile "http://github.com/ldc-developers/ldc/releases/download/v$ldcVersion/ldc2-$ldcVersion-win64-msvc.zip" -FileName ldc2.zip - 7z x ldc2.zip > $null - Set-Item -path env:DMD -value "c:\projects\ldc2-$ldcVersion-win64-msvc\bin\ldmd2.exe" - } Else { - appveyor DownloadFile "http://github.com/ldc-developers/ldc/releases/download/v$ldcVersion/ldc2-$ldcVersion-win32-msvc.zip" -FileName ldc2.zip - 7z x ldc2.zip > $null - Set-Item -path env:DMD -value "c:\projects\ldc2-$ldcVersion-win32-msvc\bin\ldmd2.exe" - } + appveyor DownloadFile "http://github.com/ldc-developers/ldc/releases/download/v$ldcVersion/ldc2-$ldcVersion-windows-$Env:APPVEYOR_JOB_ARCH.7z" -FileName ldc2.7z + 7z x ldc2.7z > $null + Set-Item -path env:DMD -value "c:\projects\ldc2-$ldcVersion-windows-$Env:APPVEYOR_JOB_ARCH\bin\ldmd2.exe" } Else { $dmdVersion = $Env:HOST_DMD_VERSION appveyor DownloadFile "http://downloads.dlang.org/releases/2.x/$dmdVersion/dmd.$dmdVersion.windows.7z" -FileName dmd.7z @@ -94,7 +88,7 @@ install: echo 'Using LLVM with enabled assertions' $assertsSuffix = '-withAsserts' } - appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/ldc-v$Env:LLVM_VERSION/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z + appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/CI/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z - md llvm - cd llvm - 7z x ..\llvm.7z > nul From 2d3deda6392282f04951f201dea8a511987967e3 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 11 Mar 2018 12:43:11 +0100 Subject: [PATCH 04/24] CMake: Try to fix linking with the LLVMWindowsManifest library --- CMakeLists.txt | 11 ++++++++--- cmake/Modules/FindLLVM.cmake | 4 ++++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 99c8a33752..55e4cb5d60 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,12 @@ endif() # find_package(LLVM 3.7 REQUIRED - all-targets analysis asmparser asmprinter bitreader bitwriter codegen core debuginfocodeview debuginfodwarf debuginfomsf debuginfopdb globalisel instcombine ipa ipo instrumentation irreader libdriver linker lto mc mcdisassembler mcparser objcarcopts object option profiledata scalaropts selectiondag support tablegen target transformutils vectorize ${EXTRA_LLVM_MODULES}) + all-targets analysis asmparser asmprinter bitreader bitwriter codegen core + debuginfocodeview debuginfodwarf debuginfomsf debuginfopdb globalisel + instcombine ipa ipo instrumentation irreader libdriver linker lto mc + mcdisassembler mcparser objcarcopts object option profiledata scalaropts + selectiondag support tablegen target transformutils vectorize + windowsmanifest ${EXTRA_LLVM_MODULES}) math(EXPR LDC_LLVM_VER ${LLVM_VERSION_MAJOR}*100+${LLVM_VERSION_MINOR}) # Remove LLVMTableGen library from list of libraries string(REGEX MATCH "^-.*LLVMTableGen[^;]*;|;-.*LLVMTableGen[^;]*" LLVM_TABLEGEN_LIBRARY "${LLVM_LIBRARIES}") @@ -555,9 +560,9 @@ set(LDC_LINKERFLAG_LIST "${SANITIZE_LDFLAGS};${LLVM_LIBRARIES};${LLVM_LDFLAGS}") if(LDC_WITH_LLD) if(NOT (LDC_LLVM_VER LESS 600)) if(MSVC) - list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCommon.lib lldCore.lib lldDriver.lib LLVMWindowsManifest.lib) + list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCommon.lib lldCore.lib lldDriver.lib) else() - set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCommon;-llldCore;-llldDriver;-lLLVMWindowsManifest;${LDC_LINKERFLAG_LIST}") + set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCommon;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST}") endif() else() if(MSVC) diff --git a/cmake/Modules/FindLLVM.cmake b/cmake/Modules/FindLLVM.cmake index 1bfc7d05ce..9a79617323 100644 --- a/cmake/Modules/FindLLVM.cmake +++ b/cmake/Modules/FindLLVM.cmake @@ -122,6 +122,10 @@ else() # Versions below 4.0 do not support component debuginfomsf list(REMOVE_ITEM LLVM_FIND_COMPONENTS "debuginfomsf" index) endif() + if(${LLVM_VERSION_STRING} MATCHES "^[3-5]\\..*") + # Versions below 6.0 do not support component windowsmanifest + list(REMOVE_ITEM LLVM_FIND_COMPONENTS "windowsmanifest" index) + endif() llvm_set(LDFLAGS ldflags) # In LLVM 3.5+, the system library dependencies (e.g. "-lz") are accessed From 3a43b27c6bda41fd1ee408041254a51240e1cd2a Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 11 Mar 2018 12:48:35 +0100 Subject: [PATCH 05/24] Adapt tests/sanitizers/fsanitize_coverage.d to LLVM 6.0.0 on Win64 --- tests/sanitizers/fsanitize_coverage.d | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/sanitizers/fsanitize_coverage.d b/tests/sanitizers/fsanitize_coverage.d index a81f4f6622..0099b66f8e 100644 --- a/tests/sanitizers/fsanitize_coverage.d +++ b/tests/sanitizers/fsanitize_coverage.d @@ -12,12 +12,12 @@ bool FuzzMe(const ubyte* data, size_t dataSize) { // PCGUARD: call {{.*}}_sanitizer_cov_trace_pc_guard - // PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_cmp + // PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_{{(const_)?}}cmp // PCGUARD: call {{.*}}_sanitizer_cov_trace_pc_guard - // PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_cmp + // PCGUARD-NOT: call {{.*}}_sanitizer_cov_trace_{{(const_)?}}cmp // PCCMP: call {{.*}}_sanitizer_cov_trace_pc_guard - // PCCMP: call {{.*}}_sanitizer_cov_trace_cmp + // PCCMP: call {{.*}}_sanitizer_cov_trace_{{(const_)?}}cmp // PCFUNC: call {{.*}}_sanitizer_cov_trace_pc_guard // PCFUNC-NOT: call {{.*}}_sanitizer_cov_trace_pc_guard From f7dcbc5e2cbd7e5d37c39fd558a2db47df3e175d Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 11 Mar 2018 14:32:19 +0100 Subject: [PATCH 06/24] CMake: Fix extraction of TableGen lib from LLVM libs The previous regex only happened to work because the TableGen lib apparently used to be the first one. The new WindowsManifest lib is the new first lib for LLVM 6.0. The previous regex also didn't work on Windows/MSVC as the LLVM_LIBRARIES entry doesn't start with `-`; it looks like `C:\...\LLVMTableGen.lib`. --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 55e4cb5d60..d9a35d620b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,8 +28,8 @@ find_package(LLVM 3.7 REQUIRED windowsmanifest ${EXTRA_LLVM_MODULES}) math(EXPR LDC_LLVM_VER ${LLVM_VERSION_MAJOR}*100+${LLVM_VERSION_MINOR}) # Remove LLVMTableGen library from list of libraries -string(REGEX MATCH "^-.*LLVMTableGen[^;]*;|;-.*LLVMTableGen[^;]*" LLVM_TABLEGEN_LIBRARY "${LLVM_LIBRARIES}") -string(REGEX REPLACE "^-.*LLVMTableGen[^;]*;|;-.*LLVMTableGen[^;]*" "" LLVM_LIBRARIES "${LLVM_LIBRARIES}") +string(REGEX MATCH "[^;]*LLVMTableGen[^;]*" LLVM_TABLEGEN_LIBRARY "${LLVM_LIBRARIES}") +string(REGEX REPLACE "[^;]*LLVMTableGen[^;]*;?" "" LLVM_LIBRARIES "${LLVM_LIBRARIES}") # Information about which targets LLVM was built to target foreach(LLVM_SUPPORTED_TARGET ${LLVM_TARGETS_TO_BUILD}) From d291b3926bd7993fc94c81cdfac7128716ad2458 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 11 Mar 2018 15:07:36 +0100 Subject: [PATCH 07/24] CMake: Try to fix linker errors on macOS The WindowsManifest LLVM libary apparently comes with a libxml2 dependency on non-Windows. --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d9a35d620b..6a89a302fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -561,6 +561,8 @@ if(LDC_WITH_LLD) if(NOT (LDC_LLVM_VER LESS 600)) if(MSVC) list(APPEND LDC_LINKERFLAG_LIST lldCOFF.lib lldCommon.lib lldCore.lib lldDriver.lib) + elseif(APPLE) + set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCommon;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST};-lxml2") else() set(LDC_LINKERFLAG_LIST "-llldCOFF;-llldCommon;-llldCore;-llldDriver;${LDC_LINKERFLAG_LIST}") endif() From 18cf4196f66c9e11ff744d85d2803af8d593dbe3 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 25 Mar 2018 17:37:34 +0200 Subject: [PATCH 08/24] LLVM 6+: Default to Dwarf debuginfos v3 At least on Linux it appears to default to v4 or newer, which druntime's rt.backtrace.dwarf doesn't handle yet. This fixes tests/codegen/exception_stack_trace.d on Linux. --- driver/targetmachine.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/driver/targetmachine.cpp b/driver/targetmachine.cpp index d75a31b2c6..70a09127c2 100644 --- a/driver/targetmachine.cpp +++ b/driver/targetmachine.cpp @@ -458,6 +458,12 @@ createTargetMachine(const std::string targetTriple, const std::string arch, if (targetOptions.MCOptions.ABIName.empty()) targetOptions.MCOptions.ABIName = getABI(triple); +#if LDC_LLVM_VER >= 600 + // druntime isn't ready for Dwarf v4+ debuginfos (e.g., in rt.backtrace.dwarf). + if (targetOptions.MCOptions.DwarfVersion == 0) + targetOptions.MCOptions.DwarfVersion = 3; +#endif + auto ldcFloatABI = floatABI; if (ldcFloatABI == FloatABI::Default) { switch (triple.getArch()) { From f1712b2c39edbb22faec1cfbe8d0e3a1c619206e Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 25 Mar 2018 19:11:12 +0200 Subject: [PATCH 09/24] Disable lit-test debuginfo/nested_cdb.d for LLVM 6.0.0+ --- tests/debuginfo/nested_cdb.d | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/debuginfo/nested_cdb.d b/tests/debuginfo/nested_cdb.d index 123e0cb2f0..7b389529d9 100644 --- a/tests/debuginfo/nested_cdb.d +++ b/tests/debuginfo/nested_cdb.d @@ -1,4 +1,5 @@ // REQUIRES: atleast_llvm500 +// REQUIRES: atmost_llvm501 // REQUIRES: Windows // REQUIRES: cdb // RUN: %ldc -g -of=%t.exe %s @@ -13,7 +14,7 @@ void encloser(int arg0, ref int arg1) { int enc_n = 123; -// CDB: bp `nested_cdb.d:16` +// CDB: bp `nested_cdb.d:17` // CDB: g // CDB: dv /t // CHECK: int arg0 = 0n1 @@ -27,7 +28,7 @@ void encloser(int arg0, ref int arg1) void nested(int nes_i) { int blub = arg0 + arg1 + enc_n; -// CDB: bp `nested_cdb.d:30` +// CDB: bp `nested_cdb.d:31` // CDB: g // CDB: dv /t // CHECK: int arg0 = 0n1 @@ -36,7 +37,7 @@ void encloser(int arg0, ref int arg1) // CDB: ?? *arg1 // CHECK: int 0n2 arg0 = arg1 = enc_n = nes_i; -// CDB: bp `nested_cdb.d:39` +// CDB: bp `nested_cdb.d:40` // CDB: g // CDB: dv /t // CHECK: int arg0 = 0n456 @@ -47,7 +48,7 @@ void encloser(int arg0, ref int arg1) } nested(456); -// CDB: bp `nested_cdb.d:50` +// CDB: bp `nested_cdb.d:51` // CDB: g // CDB: dv /t // the following values are garbage on Win32... From a2f9b8c833d27c09b8afdb2a8527469afef3292e Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 25 Mar 2018 19:13:36 +0200 Subject: [PATCH 10/24] AppVeyor: Switch back to LLVM 5.0.1 for the x86 job --- appveyor.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index a19cae91c2..305a5c938b 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -17,7 +17,7 @@ environment: DUB_VERSION: v1.7.2 - APPVEYOR_JOB_ARCH: x86 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - LLVM_VERSION: 6.0.0 + LLVM_VERSION: 5.0.1 HOST_LDC_VERSION: 1.8.0 DUB_VERSION: v1.7.2 @@ -88,7 +88,11 @@ install: echo 'Using LLVM with enabled assertions' $assertsSuffix = '-withAsserts' } - appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/CI/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z + If ($Env:LLVM_VERSION -eq '6.0.0') { + appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/CI/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z + } Else { + appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/ldc-v$Env:LLVM_VERSION/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z + } - md llvm - cd llvm - 7z x ..\llvm.7z > nul From 98faf727c91a66a0748399b945154ba5743d3cad Mon Sep 17 00:00:00 2001 From: Sebastian Wilzbach Date: Fri, 30 Mar 2018 13:09:52 +0200 Subject: [PATCH 11/24] Add Chocolately to the install instructions (#2631) --- README.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 74d1993ba3..0594f5bef8 100644 --- a/README.md +++ b/README.md @@ -45,16 +45,17 @@ can also be used to install LDC: In addition, LDC is available from various package managers: -| | Command | -| ------------ | ------------------------------------------- | -| Arch Linux | `pacman -S ldc` | -| Debian | `apt install ldc` | -| Fedora | `dnf install ldc` | -| Gentoo | `layman -a ldc` | -| Homebrew | `brew install ldc` | -| Ubuntu | `apt install ldc` | +| | Command | +| ------------ | -------------------------------------------- | +| Arch Linux | `pacman -S ldc` | +| Debian | `apt install ldc` | +| Fedora | `dnf install ldc` | +| Gentoo | `layman -a ldc` | +| Homebrew | `brew install ldc` | +| Ubuntu | `apt install ldc` | | Snap | `snap install --classic --channel=edge ldc2` | -| Nix/NixOS | `nix-env -i ldc` | +| Nix/NixOS | `nix-env -i ldc` | +| Chocolatey | `choco ldc` | Note that these packages **might be outdated** as they are not currently integrated into the project release process. From 7bc4183d9c829b1f4c7613d4065ffb9b4243a26d Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Fri, 30 Mar 2018 15:19:50 +0200 Subject: [PATCH 12/24] Lit tests that use DMD-style asm should explicitly target a supporting target (X86). (#2632) Fixes these tests for e.g. arm platforms. --- tests/semantic/asm_datadefinition_diag.d | 4 +++- tests/semantic/dcompute.d | 3 --- tests/semantic/dcompute_asm.d | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 tests/semantic/dcompute_asm.d diff --git a/tests/semantic/asm_datadefinition_diag.d b/tests/semantic/asm_datadefinition_diag.d index b6bfabe810..be1049f010 100644 --- a/tests/semantic/asm_datadefinition_diag.d +++ b/tests/semantic/asm_datadefinition_diag.d @@ -1,7 +1,9 @@ // Tests diagnostics of using data definition directives in inline asm. // Note: this test should be removed once we _do_ support them. -// RUN: not %ldc -c %s 2>&1 | FileCheck %s +// REQUIRES: target_X86 + +// RUN: not %ldc -mtriple=x86_64-linux-gnu -c %s 2>&1 | FileCheck %s void foo() { diff --git a/tests/semantic/dcompute.d b/tests/semantic/dcompute.d index 8ce0edd8e3..7fca223813 100644 --- a/tests/semantic/dcompute.d +++ b/tests/semantic/dcompute.d @@ -81,9 +81,6 @@ void func() //CHECK-NOT: Error: scope(exit) func2(); - - //CHECK: dcompute.d([[@LINE+1]]): Error: asm not allowed in `@compute` code - asm {ret;} } void func1() {} diff --git a/tests/semantic/dcompute_asm.d b/tests/semantic/dcompute_asm.d new file mode 100644 index 0000000000..d2b2854230 --- /dev/null +++ b/tests/semantic/dcompute_asm.d @@ -0,0 +1,15 @@ +// Test that the "asm" statement is not allowed for DCompute code. + +// "asm" is only allowed for X86, so we must explicitly target X86 in this test. +// REQUIRES: target_X86 + +// RUN: not %ldc -mtriple=x86_64-linux-gnu -o- %s 2>&1 | FileCheck %s + +@compute(CompileFor.deviceOnly) module tests.semaintic.dcompute; +import ldc.dcompute; + +void func() +{ + //CHECK: dcompute_asm.d([[@LINE+1]]): Error: asm not allowed in `@compute` code + asm {ret;} +} From f82d6fe953554faeefdca2aaa926b214395628c3 Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Fri, 30 Mar 2018 18:20:15 +0200 Subject: [PATCH 13/24] Clarify that error messages relate only to DMD-style asm. (#2633) --- gen/asmstmt.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gen/asmstmt.cpp b/gen/asmstmt.cpp index 237df961ea..f9f791972c 100644 --- a/gen/asmstmt.cpp +++ b/gen/asmstmt.cpp @@ -108,12 +108,14 @@ Statement *asmSemantic(AsmStatement *s, Scope *sc) { llvm::Triple const &t = *global.params.targetTriple; if (!(t.getArch() == llvm::Triple::x86 || t.getArch() == llvm::Triple::x86_64)) { - s->error("inline asm is not supported for the \"%s\" architecture", + s->error("the `asm` statement is not supported for the \"%s\" " + "architecture, use `ldc.llvmasm.__asm` instead", t.getArchName().str().c_str()); err = true; } if (!global.params.useInlineAsm) { - s->error("inline asm is not allowed when the -noasm switch is used"); + s->error( + "the `asm` statement is not allowed when the -noasm switch is used"); err = true; } if (err) { From cf5bf4d401e50a630ba435769aea129e15137479 Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Thu, 5 Apr 2018 21:54:22 +0200 Subject: [PATCH 14/24] Fix semantic/target_traits.d test on non-X86 platforms. (#2636) --- tests/semantic/target_traits.d | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/semantic/target_traits.d b/tests/semantic/target_traits.d index 81da5214b2..f03c2c4341 100644 --- a/tests/semantic/target_traits.d +++ b/tests/semantic/target_traits.d @@ -2,9 +2,9 @@ // REQUIRES: target_X86 -// RUN: %ldc -mcpu=haswell -d-version=CPU_HASWELL -c %s -// RUN: %ldc -mcpu=pentium -mattr=+fma -d-version=ATTR_FMA -c %s -// RUN: %ldc -mcpu=pentium -mattr=+fma,-sse -d-version=ATTR_FMA_MINUS_SSE -c %s +// RUN: %ldc -mtriple=x86_64-apple-darwin -mcpu=haswell -d-version=CPU_HASWELL -c %s +// RUN: %ldc -mtriple=x86_64-apple-darwin -mcpu=pentium -mattr=+fma -d-version=ATTR_FMA -c %s +// RUN: %ldc -mtriple=x86_64-apple-darwin -mcpu=pentium -mattr=+fma,-sse -d-version=ATTR_FMA_MINUS_SSE -c %s // Important: LLVM's default CPU selection already enables some features (like sse3) From 0a609c608a30903c0bd77be424d361a9e3156310 Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Tue, 10 Apr 2018 22:00:44 +0200 Subject: [PATCH 15/24] Try to test asm output in another way for more platform independence (#2634) (#2645) --- tests/codegen/asm_output.d | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/tests/codegen/asm_output.d b/tests/codegen/asm_output.d index 74d1d2c97a..3587bb4808 100644 --- a/tests/codegen/asm_output.d +++ b/tests/codegen/asm_output.d @@ -1,9 +1,10 @@ // RUN: %ldc -c -output-ll -of=%t.ll %s && FileCheck %s --check-prefix LLVM < %t.ll // RUN: %ldc -c -output-s -of=%t.s %s && FileCheck %s --check-prefix ASM < %t.s -int foo() { +// Try to keep these very simple checks independent of architecture. + +// ASM: foofoofoofoo: +extern(C) int foofoofoofoo() { + // LLVM: ret i32 42 return 42; -// Try to keep these very simple checks independent of architecture: -// LLVM: ret i32 42 -// ASM: {{(\$|#|.long )}}42 } From ae05d0cbe5c0af69598314a815d32b9cd517b537 Mon Sep 17 00:00:00 2001 From: Johan Engelen Date: Tue, 10 Apr 2018 22:01:15 +0200 Subject: [PATCH 16/24] Fix attributes.d test for PPC. (#2635) (#2644) On PPC, the i32 ABI is `signext i32`. --- tests/codegen/attributes.d | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/codegen/attributes.d b/tests/codegen/attributes.d index 2788f0c834..0e1f2157b5 100644 --- a/tests/codegen/attributes.d +++ b/tests/codegen/attributes.d @@ -26,7 +26,7 @@ import ldc.attributes; //--------------------------------------------------------------------- -// CHECK-LABEL: define i32 @_Dmain +// CHECK-LABEL: define{{.*}} i32 @_Dmain void main() { sectionedfoo(); } From 6c21e76ff498f2c13aa709064f7c37c77a57485a Mon Sep 17 00:00:00 2001 From: Martin Kinkelin Date: Tue, 10 Apr 2018 22:01:55 +0200 Subject: [PATCH 17/24] Make interface thunks forward variadic args (#2630) This fixes issue #2613. --- ir/irclass.cpp | 3 ++- tests/codegen/variadic_thunk_gh2613.d | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/codegen/variadic_thunk_gh2613.d diff --git a/ir/irclass.cpp b/ir/irclass.cpp index db85670db4..5badafeb5d 100644 --- a/ir/irclass.cpp +++ b/ir/irclass.cpp @@ -415,7 +415,8 @@ llvm::GlobalVariable *IrAggr::getInterfaceVtbl(BaseClass *b, bool new_instance, // call the real vtbl function. llvm::CallInst *call = gIR->ir->CreateCall(callee, args); call->setCallingConv(irFunc->getCallingConv()); - call->setTailCallKind(llvm::CallInst::TCK_Tail); + call->setTailCallKind(thunk->isVarArg() ? llvm::CallInst::TCK_MustTail + : llvm::CallInst::TCK_Tail); // return from the thunk if (thunk->getReturnType() == LLType::getVoidTy(gIR->context())) { diff --git a/tests/codegen/variadic_thunk_gh2613.d b/tests/codegen/variadic_thunk_gh2613.d new file mode 100644 index 0000000000..8fd5928ca0 --- /dev/null +++ b/tests/codegen/variadic_thunk_gh2613.d @@ -0,0 +1,22 @@ +// RUN: %ldc -run %s + +interface Stream +{ + void write(...); +} + +class OutputStream : Stream +{ + void write(...) + { + import core.vararg; + auto arg = va_arg!string(_argptr); + assert(arg == "Hello world"); + } +} + +void main() +{ + Stream stream = new OutputStream; + stream.write("Hello world"); +} From 819073d90d3f02529fd534fe357cbb83018e567d Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 10 Apr 2018 22:35:19 +0200 Subject: [PATCH 18/24] Enforce static default libs with cmdline option -static --- driver/main.cpp | 14 ++++++-------- tests/linking/fullystatic.d | 9 +++++++++ 2 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 tests/linking/fullystatic.d diff --git a/driver/main.cpp b/driver/main.cpp index 4351a8ad26..d901fa154a 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -500,17 +500,15 @@ void parseCommandLine(int argc, char **argv, Strings &sourceFiles, "overrides the existing list instead of appending to " "it. Please use the latter instead."); } else if (!global.params.betterC) { - if (linkDefaultLibShared && staticFlag == cl::BOU_TRUE) { - error(Loc(), "Can't use -link-defaultlib-shared and -static together"); - } - const bool addDebugSuffix = (linkDefaultLibDebug && debugLib.getNumOccurrences() == 0); - // Default to shared default libs for DLLs compiled without -static. + + // -static enforces static default libs. + // Default to shared default libs for DLLs. const bool addSharedSuffix = - linkDefaultLibShared || - (linkDefaultLibShared.getNumOccurrences() == 0 && global.params.dll && - staticFlag != cl::BOU_TRUE); + staticFlag != cl::BOU_TRUE && + (linkDefaultLibShared || + (linkDefaultLibShared.getNumOccurrences() == 0 && global.params.dll)); // Parse comma-separated default library list. std::stringstream libNames( diff --git a/tests/linking/fullystatic.d b/tests/linking/fullystatic.d new file mode 100644 index 0000000000..154f8719a3 --- /dev/null +++ b/tests/linking/fullystatic.d @@ -0,0 +1,9 @@ +/* Make sure -static overrides -link-defaultlib-shared. + * We only care about the default libs in the linker command line; + * make sure linking fails in all cases (no main()) as linking would + * fail if there are no static default libs (BUILD_SHARED_LIBS=ON). + */ + +// RUN: not %ldc -v -static -link-defaultlib-shared %s | FileCheck %s +// CHECK-NOT: druntime-ldc-shared +// CHECK-NOT: phobos2-ldc-shared From eef57c8c104398107fab2e4c1e90af01ecf2730a Mon Sep 17 00:00:00 2001 From: Martin Date: Tue, 10 Apr 2018 22:36:36 +0200 Subject: [PATCH 19/24] Print _categorized_ help if there are no files in the cmdline --- driver/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/driver/main.cpp b/driver/main.cpp index d901fa154a..d81a5c74a0 100644 --- a/driver/main.cpp +++ b/driver/main.cpp @@ -997,7 +997,7 @@ int cppmain(int argc, char **argv) { } if (files.dim == 0) { - cl::PrintHelpMessage(); + cl::PrintHelpMessage(/*Hidden=*/false, /*Categorized=*/true); return EXIT_FAILURE; } From 0157d6fc24f448c76f28b0e0e582dfaf8eaf6e24 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 14 Apr 2018 16:42:20 +0200 Subject: [PATCH 20/24] CI: Switch Circle jobs & AppVeyor x64 job to LDC-LLVM 6.0.0 final --- .circleci/config.yml | 2 +- appveyor.yml | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 77dacabb33..31a7ec9c86 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,7 +52,7 @@ commonSteps: &commonSteps echo "Using LLVM with enabled assertions" assertsSuffix="-withAsserts" fi - curl -L -o llvm.tar.xz https://github.com/ldc-developers/llvm/releases/download/CI/llvm-8d99668b-$CI_OS-x86_64$assertsSuffix-20180309.tar.xz + curl -L -o llvm.tar.xz https://github.com/ldc-developers/llvm/releases/download/ldc-v$LLVM_VERSION/llvm-$LLVM_VERSION-$CI_OS-x86_64$assertsSuffix.tar.xz tar -xf llvm.tar.xz --strip 1 -C llvm-$LLVM_VERSION rm llvm.tar.xz - run: diff --git a/appveyor.yml b/appveyor.yml index 305a5c938b..8c3d1fcaad 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -88,11 +88,7 @@ install: echo 'Using LLVM with enabled assertions' $assertsSuffix = '-withAsserts' } - If ($Env:LLVM_VERSION -eq '6.0.0') { - appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/CI/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z - } Else { - appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/ldc-v$Env:LLVM_VERSION/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z - } + appveyor DownloadFile "https://github.com/ldc-developers/llvm/releases/download/ldc-v$Env:LLVM_VERSION/llvm-$Env:LLVM_VERSION-windows-$Env:APPVEYOR_JOB_ARCH$assertsSuffix.7z" -FileName llvm.7z - md llvm - cd llvm - 7z x ..\llvm.7z > nul From 08828032fae245d7d3d5e7c44cb79ccc2ebd1046 Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 14 Apr 2018 16:43:05 +0200 Subject: [PATCH 21/24] Windows: Test -link-internally --- tests/linking/link_internally.d | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 tests/linking/link_internally.d diff --git a/tests/linking/link_internally.d b/tests/linking/link_internally.d new file mode 100644 index 0000000000..fdcddec4d4 --- /dev/null +++ b/tests/linking/link_internally.d @@ -0,0 +1,9 @@ +// REQUIRES: Windows + +// RUN: %ldc -link-internally -run %s + +void main() +{ + import std.stdio; + writeln("Hello world"); +} From 1a630e4865dd6577c81f96d7ce94d8afcc41e07d Mon Sep 17 00:00:00 2001 From: Martin Date: Sat, 14 Apr 2018 20:23:23 +0200 Subject: [PATCH 22/24] AppVeyor: Exclude new lit-test linking/link_internally.d for LLD < 6 --- appveyor.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 8c3d1fcaad..d43bf6a9a2 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -131,6 +131,9 @@ test_script: # Build and run LDC D unittests - ctest --output-on-failure -R "ldc2-unittest" # Run LIT testsuite + # Exclude linking/link_internally.d with LLD < 6 due to a magic symbol + # required since VS 2017 v15.5 (see https://reviews.llvm.org/D41089). + - ps: If ($($Env:LLVM_VERSION[0]) -lt '6') { del ..\ldc\tests\linking\link_internally.d } - ctest -V -R "lit-tests" # Run DMD testsuite - if "%APPVEYOR_JOB_ARCH%"=="x64" ( set OS=Win_64) else ( set OS=Win_32) From ddad58f08c7ba9d0f22f49305dec991a68b03331 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 15 Apr 2018 15:11:19 +0200 Subject: [PATCH 23/24] DMD-style inline asm: Add missing EIP register --- gen/asm-x86.h | 6 ++++-- tests/codegen/dmd_inline_asm_ip.d | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 tests/codegen/dmd_inline_asm_ip.d diff --git a/gen/asm-x86.h b/gen/asm-x86.h index aa4d3cdb36..74892535f7 100644 --- a/gen/asm-x86.h +++ b/gen/asm-x86.h @@ -39,6 +39,7 @@ typedef enum { Reg_EDI, Reg_EBP, Reg_ESP, + Reg_EIP, Reg_ST, Reg_ST1, Reg_ST2, @@ -160,9 +161,9 @@ typedef enum { Reg_TR7 } Reg; -static const int N_Regs = /*gp*/ 8 + /*fp*/ 8 + /*mmx*/ 8 + /*sse*/ 8 + +static const int N_Regs = /*gp*/ 8 + /*EIP*/ 1 + /*fp*/ 8 + /*mmx*/ 8 + /*sse*/ 8 + /*seg*/ 6 + /*16bit*/ 8 + /*8bit*/ 8 + /*sys*/ 4 + 6 + - 5 + /*flags*/ +1 + 5 + /*flags*/ 1 #ifdef ASM_X86_64 + 8 /*RAX, etc*/ + 8 /*R8-15*/ @@ -193,6 +194,7 @@ static struct { {"EDI", NULL_TREE, nullptr, 4, Reg_EDI}, {"EBP", NULL_TREE, nullptr, 4, Reg_EBP}, {"ESP", NULL_TREE, nullptr, 4, Reg_ESP}, + {"EIP", NULL_TREE, nullptr, 4, Reg_EIP}, {"ST", NULL_TREE, nullptr, 10, Reg_ST}, {"ST(1)", NULL_TREE, nullptr, 10, Reg_ST1}, {"ST(2)", NULL_TREE, nullptr, 10, Reg_ST2}, diff --git a/tests/codegen/dmd_inline_asm_ip.d b/tests/codegen/dmd_inline_asm_ip.d new file mode 100644 index 0000000000..9ec80e55cd --- /dev/null +++ b/tests/codegen/dmd_inline_asm_ip.d @@ -0,0 +1,17 @@ +// REQUIRES: target_X86 + +// RUN: %ldc -output-s -x86-asm-syntax=intel -mtriple=x86_64-linux-gnu -of=%t.s %s +// RUN: FileCheck %s < %t.s + +// CHECK: _D17dmd_inline_asm_ip3fooFZm +ulong foo() +{ + asm + { + // CHECK: mov eax, dword ptr [eip] + mov EAX, [EIP]; + // CHECK-NEXT: mov rax, qword ptr [rip] + mov RAX, [RIP]; + ret; + } +} From 55b570d69e5514f68a4fe60567a556c30efde329 Mon Sep 17 00:00:00 2001 From: Martin Date: Sun, 15 Apr 2018 18:41:28 +0200 Subject: [PATCH 24/24] Update druntime & Phobos * druntime: va_arg() fix for PowerPC * Phobos: MIPS32 fixes --- runtime/druntime | 2 +- runtime/phobos | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/druntime b/runtime/druntime index 0066aaa341..756fa7160d 160000 --- a/runtime/druntime +++ b/runtime/druntime @@ -1 +1 @@ -Subproject commit 0066aaa3417e196fb8171c7c96ef8673451157b3 +Subproject commit 756fa7160dfb5bd1acc0d0fc6091be6f67a17a01 diff --git a/runtime/phobos b/runtime/phobos index 91ebe89f3e..2e817406af 160000 --- a/runtime/phobos +++ b/runtime/phobos @@ -1 +1 @@ -Subproject commit 91ebe89f3e7fc96594afa84c53f93d3bfcb5be6e +Subproject commit 2e817406af1d0861041468e76a783209a6aac70e