Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit 86e5cf3

Browse files
authored
Merge pull request #3111 from kinke/cleanup_upstream
Upstream a few things from LDC to reduce the diff merged-on-behalf-of: Nicholas Wilson <thewilsonator@users.noreply.github.com>
2 parents 1876c9b + 02ab5d1 commit 86e5cf3

File tree

10 files changed

+99
-84
lines changed

10 files changed

+99
-84
lines changed

src/core/atomic.d

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -926,11 +926,11 @@ version (CoreUnittest)
926926

927927
testXCHG!(shared int)(42);
928928

929-
testType!(float)(1.0f);
929+
testType!(float)(0.1f);
930930

931931
static if (has64BitCAS)
932932
{
933-
testType!(double)(1.0);
933+
testType!(double)(0.1);
934934
testType!(long)();
935935
testType!(ulong)();
936936
}
@@ -970,15 +970,15 @@ version (CoreUnittest)
970970
atomicOp!"-="(i, cast(size_t) 1);
971971
assert(i == 0);
972972

973-
shared float f = 0;
974-
atomicOp!"+="(f, 1);
975-
assert(f == 1);
973+
shared float f = 0.1f;
974+
atomicOp!"+="(f, 0.1f);
975+
assert(f > 0.1999f && f < 0.2001f);
976976

977977
static if (has64BitCAS)
978978
{
979-
shared double d = 0;
980-
atomicOp!"+="(d, 1);
981-
assert(d == 1);
979+
shared double d = 0.1;
980+
atomicOp!"+="(d, 0.1);
981+
assert(d > 0.1999 && d < 0.2001);
982982
}
983983
}
984984

src/core/runtime.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,7 @@ static if (hasExecinfo) private class DefaultTraceInfo : Throwable.TraceInfo
820820

821821
alias traceHandlerOpApplyImpl = externDFunc!(
822822
"rt.backtrace.dwarf.traceHandlerOpApplyImpl",
823-
int function(const void*[], scope int delegate(ref size_t, ref const(char[])))
823+
int function(const(void*)[], scope int delegate(ref size_t, ref const(char[])))
824824
);
825825

826826
if (numframes >= FIRSTFRAME)

src/core/simd.d

Lines changed: 47 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -38,41 +38,53 @@ template Vector(T)
3838

3939
/* Handy aliases
4040
*/
41-
static if (is(Vector!(void[8]))) alias Vector!(void[8]) void8; ///
42-
static if (is(Vector!(double[1]))) alias Vector!(double[1]) double1; ///
43-
static if (is(Vector!(float[2]))) alias Vector!(float[2]) float2; ///
44-
static if (is(Vector!(byte[8]))) alias Vector!(byte[8]) byte8; ///
45-
static if (is(Vector!(ubyte[8]))) alias Vector!(ubyte[8]) ubyte8; ///
46-
static if (is(Vector!(short[4]))) alias Vector!(short[4]) short4; ///
47-
static if (is(Vector!(ushort[4]))) alias Vector!(ushort[4]) ushort4; ///
48-
static if (is(Vector!(int[2]))) alias Vector!(int[2]) int2; ///
49-
static if (is(Vector!(uint[2]))) alias Vector!(uint[2]) uint2; ///
50-
static if (is(Vector!(long[1]))) alias Vector!(long[1]) long1; ///
51-
static if (is(Vector!(ulong[1]))) alias Vector!(ulong[1]) ulong1; ///
52-
53-
static if (is(Vector!(void[16]))) alias Vector!(void[16]) void16; ///
54-
static if (is(Vector!(double[2]))) alias Vector!(double[2]) double2; ///
55-
static if (is(Vector!(float[4]))) alias Vector!(float[4]) float4; ///
56-
static if (is(Vector!(byte[16]))) alias Vector!(byte[16]) byte16; ///
57-
static if (is(Vector!(ubyte[16]))) alias Vector!(ubyte[16]) ubyte16; ///
58-
static if (is(Vector!(short[8]))) alias Vector!(short[8]) short8; ///
59-
static if (is(Vector!(ushort[8]))) alias Vector!(ushort[8]) ushort8; ///
60-
static if (is(Vector!(int[4]))) alias Vector!(int[4]) int4; ///
61-
static if (is(Vector!(uint[4]))) alias Vector!(uint[4]) uint4; ///
62-
static if (is(Vector!(long[2]))) alias Vector!(long[2]) long2; ///
63-
static if (is(Vector!(ulong[2]))) alias Vector!(ulong[2]) ulong2; ///
64-
65-
static if (is(Vector!(void[32]))) alias Vector!(void[32]) void32; ///
66-
static if (is(Vector!(double[4]))) alias Vector!(double[4]) double4; ///
67-
static if (is(Vector!(float[8]))) alias Vector!(float[8]) float8; ///
68-
static if (is(Vector!(byte[32]))) alias Vector!(byte[32]) byte32; ///
69-
static if (is(Vector!(ubyte[32]))) alias Vector!(ubyte[32]) ubyte32; ///
70-
static if (is(Vector!(short[16]))) alias Vector!(short[16]) short16; ///
71-
static if (is(Vector!(ushort[16]))) alias Vector!(ushort[16]) ushort16; ///
72-
static if (is(Vector!(int[8]))) alias Vector!(int[8]) int8; ///
73-
static if (is(Vector!(uint[8]))) alias Vector!(uint[8]) uint8; ///
74-
static if (is(Vector!(long[4]))) alias Vector!(long[4]) long4; ///
75-
static if (is(Vector!(ulong[4]))) alias Vector!(ulong[4]) ulong4; ///
41+
static if (is(Vector!(void[8]))) alias Vector!(void[8]) void8; ///
42+
static if (is(Vector!(double[1]))) alias Vector!(double[1]) double1; ///
43+
static if (is(Vector!(float[2]))) alias Vector!(float[2]) float2; ///
44+
static if (is(Vector!(byte[8]))) alias Vector!(byte[8]) byte8; ///
45+
static if (is(Vector!(ubyte[8]))) alias Vector!(ubyte[8]) ubyte8; ///
46+
static if (is(Vector!(short[4]))) alias Vector!(short[4]) short4; ///
47+
static if (is(Vector!(ushort[4]))) alias Vector!(ushort[4]) ushort4; ///
48+
static if (is(Vector!(int[2]))) alias Vector!(int[2]) int2; ///
49+
static if (is(Vector!(uint[2]))) alias Vector!(uint[2]) uint2; ///
50+
static if (is(Vector!(long[1]))) alias Vector!(long[1]) long1; ///
51+
static if (is(Vector!(ulong[1]))) alias Vector!(ulong[1]) ulong1; ///
52+
53+
static if (is(Vector!(void[16]))) alias Vector!(void[16]) void16; ///
54+
static if (is(Vector!(double[2]))) alias Vector!(double[2]) double2; ///
55+
static if (is(Vector!(float[4]))) alias Vector!(float[4]) float4; ///
56+
static if (is(Vector!(byte[16]))) alias Vector!(byte[16]) byte16; ///
57+
static if (is(Vector!(ubyte[16]))) alias Vector!(ubyte[16]) ubyte16; ///
58+
static if (is(Vector!(short[8]))) alias Vector!(short[8]) short8; ///
59+
static if (is(Vector!(ushort[8]))) alias Vector!(ushort[8]) ushort8; ///
60+
static if (is(Vector!(int[4]))) alias Vector!(int[4]) int4; ///
61+
static if (is(Vector!(uint[4]))) alias Vector!(uint[4]) uint4; ///
62+
static if (is(Vector!(long[2]))) alias Vector!(long[2]) long2; ///
63+
static if (is(Vector!(ulong[2]))) alias Vector!(ulong[2]) ulong2; ///
64+
65+
static if (is(Vector!(void[32]))) alias Vector!(void[32]) void32; ///
66+
static if (is(Vector!(double[4]))) alias Vector!(double[4]) double4; ///
67+
static if (is(Vector!(float[8]))) alias Vector!(float[8]) float8; ///
68+
static if (is(Vector!(byte[32]))) alias Vector!(byte[32]) byte32; ///
69+
static if (is(Vector!(ubyte[32]))) alias Vector!(ubyte[32]) ubyte32; ///
70+
static if (is(Vector!(short[16]))) alias Vector!(short[16]) short16; ///
71+
static if (is(Vector!(ushort[16]))) alias Vector!(ushort[16]) ushort16; ///
72+
static if (is(Vector!(int[8]))) alias Vector!(int[8]) int8; ///
73+
static if (is(Vector!(uint[8]))) alias Vector!(uint[8]) uint8; ///
74+
static if (is(Vector!(long[4]))) alias Vector!(long[4]) long4; ///
75+
static if (is(Vector!(ulong[4]))) alias Vector!(ulong[4]) ulong4; ///
76+
77+
static if (is(Vector!(void[64]))) alias Vector!(void[64]) void64; ///
78+
static if (is(Vector!(double[8]))) alias Vector!(double[8]) double8; ///
79+
static if (is(Vector!(float[16]))) alias Vector!(float[16]) float16; ///
80+
static if (is(Vector!(byte[64]))) alias Vector!(byte[64]) byte64; ///
81+
static if (is(Vector!(ubyte[64]))) alias Vector!(ubyte[64]) ubyte64; ///
82+
static if (is(Vector!(short[32]))) alias Vector!(short[32]) short32; ///
83+
static if (is(Vector!(ushort[32]))) alias Vector!(ushort[32]) ushort32; ///
84+
static if (is(Vector!(int[16]))) alias Vector!(int[16]) int16; ///
85+
static if (is(Vector!(uint[16]))) alias Vector!(uint[16]) uint16; ///
86+
static if (is(Vector!(long[8]))) alias Vector!(long[8]) long8; ///
87+
static if (is(Vector!(ulong[8]))) alias Vector!(ulong[8]) ulong8; ///
7688

7789
version (D_SIMD)
7890
{

src/core/thread/osthread.d

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,12 @@ else version (Windows)
159159
*/
160160
class ThreadException : Exception
161161
{
162-
@safe pure nothrow this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null)
162+
@nogc @safe pure nothrow this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null)
163163
{
164164
super(msg, file, line, next);
165165
}
166166

167-
@safe pure nothrow this(string msg, Throwable next, string file = __FILE__, size_t line = __LINE__)
167+
@nogc @safe pure nothrow this(string msg, Throwable next, string file = __FILE__, size_t line = __LINE__)
168168
{
169169
super(msg, file, line, next);
170170
}
@@ -176,12 +176,12 @@ class ThreadException : Exception
176176
*/
177177
class ThreadError : Error
178178
{
179-
@safe pure nothrow this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null)
179+
@nogc @safe pure nothrow this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null)
180180
{
181181
super(msg, file, line, next);
182182
}
183183

184-
@safe pure nothrow this(string msg, Throwable next, string file = __FILE__, size_t line = __LINE__)
184+
@nogc @safe pure nothrow this(string msg, Throwable next, string file = __FILE__, size_t line = __LINE__)
185185
{
186186
super(msg, file, line, next);
187187
}

src/rt/backtrace/dwarf.d

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ struct Location
8181
size_t address;
8282
}
8383

84-
int traceHandlerOpApplyImpl(const void*[] callstack, scope int delegate(ref size_t, ref const(char[])) dg)
84+
int traceHandlerOpApplyImpl(const(void*)[] callstack, scope int delegate(ref size_t, ref const(char[])) dg)
8585
{
8686
import core.stdc.stdio : snprintf;
8787
import core.sys.posix.stdlib : free;

src/rt/sections_android.d

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ struct SectionGroup
4444
return _moduleGroup;
4545
}
4646

47+
version (DigitalMars)
4748
@property immutable(FuncTable)[] ehTables() const nothrow @nogc
4849
{
4950
auto pbeg = cast(immutable(FuncTable)*)&__start_deh;

src/rt/sections_darwin_64.d

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,6 @@
1111
*/
1212
module rt.sections_darwin_64;
1313

14-
import core.sys.darwin.mach.dyld;
15-
import core.sys.darwin.mach.getsect;
16-
import core.sys.posix.pthread;
17-
1814
version (OSX)
1915
version = Darwin;
2016
else version (iOS)
@@ -27,6 +23,12 @@ else version (WatchOS)
2723
version (Darwin):
2824
version (D_LP64):
2925

26+
import core.sys.darwin.mach.dyld;
27+
import core.sys.darwin.mach.getsect;
28+
import core.sys.posix.pthread;
29+
30+
import rt.util.utility : safeAssert;
31+
3032
extern (C) size_t malloc_size(const void* ptr) nothrow @nogc;
3133

3234
/**
@@ -176,3 +178,28 @@ const(section_64)[] sections(const segment_command_64* segment) pure nothrow @no
176178
const firstSection = cast(const(section_64)*)(cast(ubyte*) segment + size);
177179
return firstSection[0 .. segment.nsects];
178180
}
181+
182+
/// Invokes the specified delegate for each (non-empty) data section.
183+
void foreachDataSection(in mach_header* header, intptr_t slide,
184+
scope void delegate(void[] sectionData) processor)
185+
{
186+
foreach (section; [ SECT_DATA, SECT_BSS, SECT_COMMON ])
187+
{
188+
auto data = getSection(header, slide, SEG_DATA.ptr, section.ptr);
189+
if (data !is null)
190+
processor(data);
191+
}
192+
}
193+
194+
/// Returns a section's memory range, or null if not found or empty.
195+
void[] getSection(in mach_header* header, intptr_t slide,
196+
in char* segmentName, in char* sectionName)
197+
{
198+
safeAssert(header.magic == MH_MAGIC_64, "Unsupported header.");
199+
auto sect = getsectbynamefromheader_64(cast(mach_header_64*) header,
200+
segmentName, sectionName);
201+
202+
if (sect !is null && sect.size > 0)
203+
return (cast(void*)sect.addr + slide)[0 .. cast(size_t) sect.size];
204+
return null;
205+
}

src/rt/sections_elf_shared.d

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ struct DSO
9595
return _moduleGroup;
9696
}
9797

98+
version (DigitalMars)
9899
@property immutable(FuncTable)[] ehTables() const nothrow @nogc
99100
{
100101
return null;

src/rt/sections_osx_x86_64.d

Lines changed: 4 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,11 @@ import core.sys.posix.pthread;
3030
import core.sys.darwin.mach.dyld;
3131
import core.sys.darwin.mach.getsect;
3232

33-
import rt.deh, rt.minfo;
33+
import rt.deh;
34+
import rt.minfo;
35+
import rt.sections_darwin_64;
3436
import rt.util.container.array;
3537
import rt.util.utility : safeAssert;
36-
import rt.sections_darwin_64 : getTLSRange;
3738

3839
struct SectionGroup
3940
{
@@ -121,12 +122,7 @@ __gshared SectionGroup _sections;
121122

122123
extern (C) void sections_osx_onAddImage(const scope mach_header* h, intptr_t slide)
123124
{
124-
foreach (e; dataSegs)
125-
{
126-
auto sect = getSection(h, slide, e.seg.ptr, e.sect.ptr);
127-
if (sect != null)
128-
_sections._gcRanges.insertBack((cast(void*)sect.ptr)[0 .. sect.length]);
129-
}
125+
foreachDataSection(h, slide, (sectionData) { _sections._gcRanges.insertBack(sectionData); });
130126

131127
auto minfosect = getSection(h, slide, "__DATA", "__minfodata");
132128
if (minfosect != null)
@@ -160,26 +156,3 @@ extern (C) void sections_osx_onAddImage(const scope mach_header* h, intptr_t sli
160156
_sections._ehTables = p[0 .. len];
161157
}
162158
}
163-
164-
struct SegRef
165-
{
166-
string seg;
167-
string sect;
168-
}
169-
170-
static immutable SegRef[] dataSegs = [{SEG_DATA, SECT_DATA},
171-
{SEG_DATA, SECT_BSS},
172-
{SEG_DATA, SECT_COMMON}];
173-
174-
ubyte[] getSection(in mach_header* header, intptr_t slide,
175-
in char* segmentName, in char* sectionName)
176-
{
177-
safeAssert(header.magic == MH_MAGIC_64, "Unsupported header.");
178-
auto sect = getsectbynamefromheader_64(cast(mach_header_64*)header,
179-
segmentName,
180-
sectionName);
181-
182-
if (sect !is null && sect.size > 0)
183-
return (cast(ubyte*)sect.addr + slide)[0 .. cast(size_t)sect.size];
184-
return null;
185-
}

src/rt/sections_win64.d

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ struct SectionGroup
4141
return _moduleGroup;
4242
}
4343

44+
version (DigitalMars)
4445
version (Win64)
4546
@property immutable(FuncTable)[] ehTables() const nothrow @nogc
4647
{

0 commit comments

Comments
 (0)