aboutsummaryrefslogtreecommitdiff
path: root/libphobos
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gcc.gnu.org>2019-04-11 21:11:15 +0000
committerIain Buclaw <ibuclaw@gcc.gnu.org>2019-04-11 21:11:15 +0000
commitc8bf6646ed17bfb7e2350152935e9cba829bf929 (patch)
tree0b6fe88eb99fe62d847652c87a20c1237ca06ec6 /libphobos
parent9607e404a5853c68bcfb8d1bab823736597409bc (diff)
downloadgcc-c8bf6646ed17bfb7e2350152935e9cba829bf929.zip
gcc-c8bf6646ed17bfb7e2350152935e9cba829bf929.tar.gz
gcc-c8bf6646ed17bfb7e2350152935e9cba829bf929.tar.bz2
libphobos: Merge upstream phobos cf95639ff
Backports ports committed to upstream phobos since the last sync. Reviewed-on: https://github.com/dlang/phobos/pull/6947 From-SVN: r270296
Diffstat (limited to 'libphobos')
-rw-r--r--libphobos/src/MERGE2
-rw-r--r--libphobos/src/std/datetime/systime.d16
-rw-r--r--libphobos/src/std/datetime/timezone.d18
-rw-r--r--libphobos/src/std/experimental/allocator/building_blocks/region.d2
-rw-r--r--libphobos/src/std/file.d13
-rw-r--r--libphobos/src/std/internal/cstring.d11
-rw-r--r--libphobos/src/std/math.d54
-rw-r--r--libphobos/src/std/parallelism.d8
-rw-r--r--libphobos/src/std/path.d2
-rw-r--r--libphobos/src/std/socket.d8
-rw-r--r--libphobos/src/std/stdio.d6
11 files changed, 128 insertions, 12 deletions
diff --git a/libphobos/src/MERGE b/libphobos/src/MERGE
index 63bd468..b4d44b5 100644
--- a/libphobos/src/MERGE
+++ b/libphobos/src/MERGE
@@ -1,4 +1,4 @@
-ef07932811de50a1d5810ea23462d127a60574a6
+cf95639ffd9ed6f3b9d10d98461b2fbd31615757
The first line of this file holds the git revision number of the last
merge done from the dlang/phobos repository.
diff --git a/libphobos/src/std/datetime/systime.d b/libphobos/src/std/datetime/systime.d
index e65d296..326b544 100644
--- a/libphobos/src/std/datetime/systime.d
+++ b/libphobos/src/std/datetime/systime.d
@@ -214,6 +214,22 @@ public:
hnsecsToUnixEpoch;
}
}
+ else version (DragonFlyBSD)
+ {
+ import core.sys.dragonflybsd.time : clock_gettime, CLOCK_REALTIME,
+ CLOCK_REALTIME_FAST, CLOCK_REALTIME_PRECISE, CLOCK_SECOND;
+ static if (clockType == ClockType.coarse) alias clockArg = CLOCK_REALTIME_FAST;
+ else static if (clockType == ClockType.normal) alias clockArg = CLOCK_REALTIME;
+ else static if (clockType == ClockType.precise) alias clockArg = CLOCK_REALTIME_PRECISE;
+ else static if (clockType == ClockType.second) alias clockArg = CLOCK_SECOND;
+ else static assert(0, "Previous static if is wrong.");
+ timespec ts;
+ if (clock_gettime(clockArg, &ts) != 0)
+ throw new TimeException("Call to clock_gettime() failed");
+ return convert!("seconds", "hnsecs")(ts.tv_sec) +
+ ts.tv_nsec / 100 +
+ hnsecsToUnixEpoch;
+ }
else version (Solaris)
{
static if (clockType == ClockType.second)
diff --git a/libphobos/src/std/datetime/timezone.d b/libphobos/src/std/datetime/timezone.d
index e923a34..7ae1902 100644
--- a/libphobos/src/std/datetime/timezone.d
+++ b/libphobos/src/std/datetime/timezone.d
@@ -292,10 +292,12 @@ public:
version (Posix)
{
- version (FreeBSD) enum utcZone = "Etc/UTC";
- else version (NetBSD) enum utcZone = "UTC";
- else version (linux) enum utcZone = "UTC";
- else version (OSX) enum utcZone = "UTC";
+ version (FreeBSD) enum utcZone = "Etc/UTC";
+ else version (NetBSD) enum utcZone = "UTC";
+ else version (DragonFlyBSD) enum utcZone = "UTC";
+ else version (linux) enum utcZone = "UTC";
+ else version (OSX) enum utcZone = "UTC";
+ else version (Solaris) enum utcZone = "UTC";
else static assert(0, "The location of the UTC timezone file on this Posix platform must be set.");
auto tzs = [testTZ("America/Los_Angeles", "PST", "PDT", dur!"hours"(-8), dur!"hours"(1)),
@@ -1891,6 +1893,14 @@ public:
// Android concatenates all time zone data into a single file and stores it here.
enum defaultTZDatabaseDir = "/system/usr/share/zoneinfo/";
}
+ else version (Solaris)
+ {
+ /++
+ The default directory where the TZ Database files are. It's empty
+ for Windows, since Windows doesn't have them.
+ +/
+ enum defaultTZDatabaseDir = "/usr/share/lib/zoneinfo/";
+ }
else version (Posix)
{
/++
diff --git a/libphobos/src/std/experimental/allocator/building_blocks/region.d b/libphobos/src/std/experimental/allocator/building_blocks/region.d
index dfcecce..3d8431c 100644
--- a/libphobos/src/std/experimental/allocator/building_blocks/region.d
+++ b/libphobos/src/std/experimental/allocator/building_blocks/region.d
@@ -392,6 +392,8 @@ struct InSituRegion(size_t size, size_t minAlign = platformAlignment)
else version (PPC64) enum growDownwards = Yes.growDownwards;
else version (MIPS32) enum growDownwards = Yes.growDownwards;
else version (MIPS64) enum growDownwards = Yes.growDownwards;
+ else version (RISCV32) enum growDownwards = Yes.growDownwards;
+ else version (RISCV64) enum growDownwards = Yes.growDownwards;
else version (SPARC) enum growDownwards = Yes.growDownwards;
else version (SystemZ) enum growDownwards = Yes.growDownwards;
else static assert(0, "Dunno how the stack grows on this architecture.");
diff --git a/libphobos/src/std/file.d b/libphobos/src/std/file.d
index 17b7ca8..9ba9929 100644
--- a/libphobos/src/std/file.d
+++ b/libphobos/src/std/file.d
@@ -1488,6 +1488,7 @@ if (isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R))
// - OS X, where the native filesystem (HFS+) stores filesystem
// timestamps with 1-second precision.
version (FreeBSD) {} else
+version (DragonFlyBSD) {} else
version (OSX) {} else
@system unittest
{
@@ -2779,6 +2780,10 @@ else version (NetBSD)
{
return readLink("/proc/self/exe");
}
+ else version (DragonFlyBSD)
+ {
+ return readLink("/proc/curproc/file");
+ }
else version (Solaris)
{
import core.sys.posix.unistd : getpid;
@@ -3092,8 +3097,12 @@ else version (Posix)
{
import std.path : buildPath;
- immutable len = core.stdc.string.strlen(fd.d_name.ptr);
- _name = buildPath(path, fd.d_name[0 .. len]);
+ static if (is(typeof(fd.d_namlen)))
+ immutable len = fd.d_namlen;
+ else
+ immutable len = (() @trusted => core.stdc.string.strlen(fd.d_name.ptr))();
+
+ _name = buildPath(path, (() @trusted => fd.d_name.ptr[0 .. len])());
_didLStat = false;
_didStat = false;
diff --git a/libphobos/src/std/internal/cstring.d b/libphobos/src/std/internal/cstring.d
index 257a100..e5bc7f7 100644
--- a/libphobos/src/std/internal/cstring.d
+++ b/libphobos/src/std/internal/cstring.d
@@ -131,17 +131,20 @@ if (isSomeChar!To && (isInputRange!From || isSomeString!From) &&
private:
To* _ptr;
size_t _length; // length of the string
+
+ // the 'small string optimization'
version (unittest)
{
- enum buffLength = 16 / To.sizeof; // smaller size to trigger reallocations
+ // smaller size to trigger reallocations. Padding is to account for
+ // unittest/non-unittest cross-compilation (to avoid corruption)
+ To[16 / To.sizeof] _buff;
+ To[(256 - 16) / To.sizeof] _unittest_pad;
}
else
{
- enum buffLength = 256 / To.sizeof; // production size
+ To[256 / To.sizeof] _buff; // production size
}
- To[buffLength] _buff; // the 'small string optimization'
-
static Res trustedVoidInit() { Res res = void; return res; }
}
diff --git a/libphobos/src/std/math.d b/libphobos/src/std/math.d
index e98e746..daee6ec 100644
--- a/libphobos/src/std/math.d
+++ b/libphobos/src/std/math.d
@@ -162,6 +162,8 @@ version (AArch64) version = ARM_Any;
version (ARM) version = ARM_Any;
version (SPARC) version = SPARC_Any;
version (SPARC64) version = SPARC_Any;
+version (RISCV32) version = RISCV_Any;
+version (RISCV64) version = RISCV_Any;
version (D_InlineAsm_X86)
{
@@ -4683,6 +4685,7 @@ private:
// The Pentium SSE2 status register is 32 bits.
// The ARM and PowerPC FPSCR is a 32-bit register.
// The SPARC FSR is a 32bit register (64 bits for SPARC 7 & 8, but high bits are uninteresting).
+ // The RISC-V (32 & 64 bit) fcsr is 32-bit register.
uint flags;
version (CRuntime_Microsoft)
@@ -4987,6 +4990,10 @@ else version (PPC_Any)
{
version = IeeeFlagsSupport;
}
+else version (RISCV_Any)
+{
+ version = IeeeFlagsSupport;
+}
else version (MIPS_Any)
{
version = IeeeFlagsSupport;
@@ -5226,6 +5233,21 @@ struct FloatingPointControl
| inexactException,
}
}
+ else version (RISCV_Any)
+ {
+ enum : ExceptionMask
+ {
+ inexactException = 0x01,
+ divByZeroException = 0x02,
+ underflowException = 0x04,
+ overflowException = 0x08,
+ invalidException = 0x10,
+ severeExceptions = overflowException | divByZeroException
+ | invalidException,
+ allExceptions = severeExceptions | underflowException
+ | inexactException,
+ }
+ }
else version (X86_Any)
{
enum : ExceptionMask
@@ -5338,6 +5360,10 @@ private:
{
alias ControlState = uint;
}
+ else version (RISCV_Any)
+ {
+ alias ControlState = uint;
+ }
else version (X86_Any)
{
alias ControlState = ushort;
@@ -7595,6 +7621,34 @@ private real polyImpl(real x, in real[] A) @trusted pure nothrow @nogc
;
}
}
+ else version (DragonFlyBSD)
+ {
+ asm pure nothrow @nogc // assembler by W. Bright
+ {
+ // EDX = (A.length - 1) * real.sizeof
+ mov ECX,A[EBP] ; // ECX = A.length
+ dec ECX ;
+ lea EDX,[ECX*8] ;
+ lea EDX,[EDX][ECX*4] ;
+ add EDX,A+4[EBP] ;
+ fld real ptr [EDX] ; // ST0 = coeff[ECX]
+ jecxz return_ST ;
+ fld x[EBP] ; // ST0 = x
+ fxch ST(1) ; // ST1 = x, ST0 = r
+ align 4 ;
+ L2: fmul ST,ST(1) ; // r *= x
+ fld real ptr -12[EDX] ;
+ sub EDX,12 ; // deg--
+ faddp ST(1),ST ;
+ dec ECX ;
+ jne L2 ;
+ fxch ST(1) ; // ST1 = r, ST0 = x
+ fstp ST(0) ; // dump x
+ align 4 ;
+ return_ST: ;
+ ;
+ }
+ }
else
{
static assert(0);
diff --git a/libphobos/src/std/parallelism.d b/libphobos/src/std/parallelism.d
index df07baf..64fa2f9 100644
--- a/libphobos/src/std/parallelism.d
+++ b/libphobos/src/std/parallelism.d
@@ -94,6 +94,10 @@ else version (FreeBSD)
{
version = useSysctlbyname;
}
+else version (DragonFlyBSD)
+{
+ version = useSysctlbyname;
+}
else version (NetBSD)
{
version = useSysctlbyname;
@@ -146,6 +150,10 @@ else version (useSysctlbyname)
{
auto nameStr = "hw.ncpu\0".ptr;
}
+ else version (DragonFlyBSD)
+ {
+ auto nameStr = "hw.ncpu\0".ptr;
+ }
else version (NetBSD)
{
auto nameStr = "hw.ncpu\0".ptr;
diff --git a/libphobos/src/std/path.d b/libphobos/src/std/path.d
index 32870ea..4a435ef 100644
--- a/libphobos/src/std/path.d
+++ b/libphobos/src/std/path.d
@@ -3970,7 +3970,7 @@ string expandTilde(string inputPath) nothrow
}
if (errno != ERANGE &&
- // On FreeBSD and OSX, errno can be left at 0 instead of set to ERANGE
+ // On BSD and OSX, errno can be left at 0 instead of set to ERANGE
errno != 0)
onOutOfMemoryError();
diff --git a/libphobos/src/std/socket.d b/libphobos/src/std/socket.d
index 78479c8..2853dbd 100644
--- a/libphobos/src/std/socket.d
+++ b/libphobos/src/std/socket.d
@@ -187,6 +187,14 @@ string formatSocketError(int err) @trusted
else
return "Socket error " ~ to!string(err);
}
+ else version (DragonFlyBSD)
+ {
+ auto errs = strerror_r(err, buf.ptr, buf.length);
+ if (errs == 0)
+ cs = buf.ptr;
+ else
+ return "Socket error " ~ to!string(err);
+ }
else version (Solaris)
{
auto errs = strerror_r(err, buf.ptr, buf.length);
diff --git a/libphobos/src/std/stdio.d b/libphobos/src/std/stdio.d
index 91646e7..63bc32e 100644
--- a/libphobos/src/std/stdio.d
+++ b/libphobos/src/std/stdio.d
@@ -63,6 +63,12 @@ version (NetBSD)
version = HAS_GETDELIM;
}
+version (DragonFlyBSD)
+{
+ version = GENERIC_IO;
+ version = HAS_GETDELIM;
+}
+
version (Solaris)
{
version = GENERIC_IO;