@@ -5,9 +5,9 @@ $(CHANGELOG_NAV_INJECT)
5
5
$(VERSION Feb 01, 2024, =================================================,
6
6
7
7
$(CHANGELOG_HEADER_STATISTICS
8
- $(VER) comes with 9 major changes and 52 fixed Bugzilla issues.
8
+ $(VER) comes with 10 major changes and 61 fixed Bugzilla issues.
9
9
A huge thanks goes to the
10
- $(LINK2 #contributors, 35 contributors)
10
+ $(LINK2 #contributors, 37 contributors)
11
11
who made $(VER) possible.)
12
12
13
13
$(BUGSTITLE_TEXT_HEADER Compiler changes,
@@ -22,6 +22,7 @@ $(LI $(RELATIVE_LINK2 dmd.template-_d_newarratmT,`_d_newarray{mTX,miTX,OpT}` are
22
22
23
23
$(BUGSTITLE_TEXT_HEADER Runtime changes,
24
24
25
+ $(LI $(RELATIVE_LINK2 druntime.coreatomic,Using an invalid MemoryOrder for `core.atomic` operations are now rejected at compile time))
25
26
$(LI $(RELATIVE_LINK2 druntime.makefiles,Makefiles cleanup for druntime))
26
27
$(LI $(RELATIVE_LINK2 druntime.stdatomic,New addition of the C stdatomic header implemented in D))
27
28
@@ -172,6 +173,105 @@ This change adds the new template to `core.internal.array.construction`.
172
173
173
174
$(BUGSTITLE_TEXT_BODY Runtime changes,
174
175
176
+ $(LI $(LNAME2 druntime.coreatomic,Using an invalid MemoryOrder for `core.atomic` operations are now rejected at compile time)
177
+ $(CHANGELOG_SOURCE_FILE dmd, changelog/druntime.coreatomic.dd)
178
+ $(P
179
+ The following `core.atomic` functions have become more restrictive:
180
+ )
181
+
182
+ $(P
183
+ 1. `atomicLoad` and `atomicStore` now reject being instantiated with the
184
+ argument `MemoryOrder.acq_rel`. Previously `atomicLoad` and `atomicStore` only
185
+ rejected `MemoryOrder.rel` and `MemoryOrder.acq` respectively.
186
+ )
187
+
188
+ $(P
189
+ In most cases, code that previously used `MemoryOrder.acq_rel` should switch to
190
+ use `MemoryOrder.seq` instead.
191
+ )
192
+
193
+ ---
194
+ // Error:
195
+ atomicLoad!(MemoryOrder.acq_rel)(src);
196
+ atomicStore!(MemoryOrder.acq_rel)(dest, value);
197
+
198
+ // Corrective action:
199
+ atomicLoad!(MemoryOrder.seq)(src);
200
+ atomicStore!(MemoryOrder.seq)(dest, value);
201
+
202
+ // Or:
203
+ atomicLoad(src);
204
+ atomicStore(dest, value);
205
+ ---
206
+
207
+ $(P
208
+ 2. `atomicExchange` now rejects being instantiated with the argument
209
+ `MemoryOrder.acq`.
210
+ )
211
+
212
+ $(P
213
+ In most cases, code that previously used `MemoryOrder.acq` should switch to use
214
+ `MemoryOrder.seq` instead.
215
+ )
216
+
217
+ ---
218
+ // Error:
219
+ atomicExchange!(MemoryOrder.acq)(dest, value);
220
+
221
+ // Corrective action:
222
+ atomicExchange!(MemoryOrder.seq)(dest, value);
223
+
224
+ // Or:
225
+ atomicExchange(dest, value);
226
+ ---
227
+
228
+ $(P
229
+ 3. `atomicCompareExchangeWeak` and `atomicCompareExchangeStrong` now reject
230
+ being instantiated when the second `fail` argument is `MemoryOrder.rel` or
231
+ `MemoryOrder.acq_rel`.
232
+ )
233
+
234
+ $(P
235
+ In most cases, code that previously used either of these should switch to use
236
+ `MemoryOrder.raw` instead.
237
+ )
238
+
239
+ ---
240
+ // Error:
241
+ atomicExchangeWeak!(MemoryOrder.rel, MemoryOrder.rel)(dest, compare, value);
242
+ atomicExchangeWeakNoResult!(MemoryOrder.acq_rel, MemoryOrder.acq_rel)(dest, compare, value);
243
+ atomicExchangeStrong!(MemoryOrder.acq, MemoryOrder.rel)(dest, compare, value);
244
+ atomicExchangeStrongNoResult!(MemoryOrder.seq, MemoryOrder.acq_rel)(dest, compare, value);
245
+
246
+ // Corrective action:
247
+ atomicExchangeWeak!(MemoryOrder.rel, MemoryOrder.raw)(dest, compare, value);
248
+ atomicExchangeWeakNoResult!(MemoryOrder.acq_rel, MemoryOrder.raw)(dest, compare, value);
249
+ atomicExchangeStrong!(MemoryOrder.acq, MemoryOrder.raw)(dest, compare, value);
250
+ atomicExchangeStrongNoResult!(MemoryOrder.seq, MemoryOrder.raw)(dest, compare, value);
251
+ ---
252
+
253
+ $(P
254
+ 4. `atomicCompareExchangeWeak` and `atomicCompareExchangeStrong` additionally
255
+ now reject being instantiated when the second `fail` argument has a greater
256
+ value than its first `succ` argument.
257
+ )
258
+
259
+ $(P
260
+ In most cases, code that violates this contract should use the same MemoryOrder
261
+ for both `succ` and `fail` arguments.
262
+ )
263
+
264
+ ---
265
+ // Error:
266
+ atomicExchangeWeak!(MemoryOrder.raw)(dest, compare, value);
267
+ atomicExchangeStrong!(MemoryOrder.acq, MemoryOrder.seq)(dest, compare, value);
268
+
269
+ // Corrective action:
270
+ atomicExchangeWeak!(MemoryOrder.raw, MemoryOrder.raw)(dest, compare, value);
271
+ atomicExchangeStrong!(MemoryOrder.acq, MemoryOrder.acq)(dest, compare, value);
272
+ ---
273
+ )
274
+
175
275
$(LI $(LNAME2 druntime.makefiles,Makefiles cleanup for druntime)
176
276
$(CHANGELOG_SOURCE_FILE dmd, changelog/druntime.makefiles.dd)
177
277
$(P
@@ -234,7 +334,9 @@ $(BUGSTITLE_BUGZILLA DMD Compiler regression fixes,
234
334
235
335
$(LI $(BUGZILLA 24266): ImportC: struct initializer entry gets ignored)
236
336
$(LI $(BUGZILLA 24274): [REG master] ImportC: unrecognized C initializer with array in struct)
337
+ $(LI $(BUGZILLA 24295): [betterC] ICE with new int[])
237
338
$(LI $(BUGZILLA 24301): [REG 2.100] Misleading error message when passing non-copyable struct by value in @safe code)
339
+ $(LI $(BUGZILLA 24338): Cannot concatenate dynamic arrays of enum type with static array base type)
238
340
)
239
341
$(BUGSTITLE_BUGZILLA DMD Compiler bug fixes,
240
342
@@ -252,6 +354,7 @@ $(LI $(BUGZILLA 24094): importC __declspec not working in front of declaration s
252
354
$(LI $(BUGZILLA 24200): ImportC: .di file collected macro conflicts with Special Token)
253
355
$(LI $(BUGZILLA 24224): __traits$(LPAREN)initSymbol$(RPAREN) treats aggregate-derived enum as base type)
254
356
$(LI $(BUGZILLA 24248): const constructor call with mutable target gives wrong error message)
357
+ $(LI $(BUGZILLA 24252): ci: Error: error writing file 'compilable\testcstuff3_0.obj')
255
358
$(LI $(BUGZILLA 24264): ImportC: inliner trips on _Bool return)
256
359
$(LI $(BUGZILLA 24276): ImportC: typedef aliases not emitted correctly in .di files)
257
360
$(LI $(BUGZILLA 24280): ImportC: forward reference error when compiling multiple files)
@@ -261,6 +364,11 @@ $(LI $(BUGZILLA 24292): Struct with destructor wrongly returned in register)
261
364
$(LI $(BUGZILLA 24303): anonymous struct problems when typedef'd in separate C files)
262
365
$(LI $(BUGZILLA 24304): __uint16_t, __uint32_t, __uint64_t are not recognized)
263
366
$(LI $(BUGZILLA 24306): ImportC: same name structs in separate C files interfere when compiled together)
367
+ $(LI $(BUGZILLA 24309): Memory allocation failed on Azure pipeline)
368
+ $(LI $(BUGZILLA 24311): Named enum with AA base type causes ICE)
369
+ $(LI $(BUGZILLA 24319): OpenBSD: Use correct type for file_time)
370
+ $(LI $(BUGZILLA 24326): ImportC: segfault on nameless enum translation with -H)
371
+ $(LI $(BUGZILLA 24340): Invalid export directives generated)
264
372
)
265
373
$(BUGSTITLE_BUGZILLA DMD Compiler enhancements,
266
374
@@ -284,6 +392,7 @@ $(BUGSTITLE_BUGZILLA Phobos bug fixes,
284
392
$(LI $(BUGZILLA 24151): std.container.array: Array!string$(LPAREN)""$(RPAREN) does not compile)
285
393
$(LI $(BUGZILLA 24215): std.traits.isBasicType!Enum should be false)
286
394
$(LI $(BUGZILLA 24278): std.math.abs promotes unsigned argument to 32 bits)
395
+ $(LI $(BUGZILLA 24342): T[][].until$(LPAREN)T[]$(RPAREN) breaks if sentinel is longer than 1.)
287
396
)
288
397
$(BUGSTITLE_BUGZILLA Phobos enhancements,
289
398
@@ -313,11 +422,12 @@ $(LI $(BUGZILLA 24177): Array literal can implicitly convert to an expected type
313
422
$(LI $(BUGZILLA 24210): Function types are not documented)
314
423
)
315
424
)
316
- $(D_CONTRIBUTORS_HEADER 35 )
425
+ $(D_CONTRIBUTORS_HEADER 37 )
317
426
$(D_CONTRIBUTORS
318
427
$(D_CONTRIBUTOR Adam D. Ruppe)
319
428
$(D_CONTRIBUTOR Atila Neves)
320
429
$(D_CONTRIBUTOR Basile Burg)
430
+ $(D_CONTRIBUTOR Brian Callahan)
321
431
$(D_CONTRIBUTOR Daniel Pflager)
322
432
$(D_CONTRIBUTOR Danil Sidoruk)
323
433
$(D_CONTRIBUTOR Denis Feklushkin)
@@ -347,6 +457,7 @@ $(D_CONTRIBUTORS
347
457
$(D_CONTRIBUTOR Sönke Ludwig)
348
458
$(D_CONTRIBUTOR Teodor Dutu)
349
459
$(D_CONTRIBUTOR Tim Schendekehl)
460
+ $(D_CONTRIBUTOR Timon Gehr)
350
461
$(D_CONTRIBUTOR Walter Bright)
351
462
$(D_CONTRIBUTOR Yang Yujie)
352
463
$(D_CONTRIBUTOR Семён Марьясин)
0 commit comments