Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package dmd for openSUSE:Factory checked in 
at 2026-03-29 20:01:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/dmd (Old)
 and      /work/SRC/openSUSE:Factory/.dmd.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "dmd"

Sun Mar 29 20:01:13 2026 rev:44 rq:1343466 version:2.112.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/dmd/dmd.changes  2026-01-13 21:34:22.871541962 
+0100
+++ /work/SRC/openSUSE:Factory/.dmd.new.8177/dmd.changes        2026-03-29 
20:01:41.947920911 +0200
@@ -1,0 +2,30 @@
+Sun Mar 29 15:07:21 UTC 2026 - Andrea Manzini <[email protected]>
+
+- Update to version 2.112.1
+  * fix #22323 - error "cannot get frame pointer" with AA in struct literal
+  * fix #22354 - aa[key] ~= null discarded
+  * fix #22386 - Indexed initialization of multi dimensional const array does 
+    not compile
+  * fix #22406 - [REG 2.112] Error: function '_d_aaLen' is not callable
+  * [stable] Fix #22422 - Missing _d_cast lowering for CommaExp
+  * [stable] etc.linux.memoryerror: Adapt to dynamic SIGSTKSZ since glibc v2.34
+  * Backport PR's to fix stable
+  * fix #22480 - Regression in DMD v2.112, betterC can not work with CTFE 
+    associative array any more
+  * fix #22510 - dup of inout aa broke with 2.112
+  * fix #21976: [REG 2.112.0] Array comparison performance regression
+  * Revert "fix #21976: [REG 2.112.0] Array comparison performance regression"
+  * [stable] Fix #22544 - Cannot index AA in with block
+  * [stable] buildAAIndexRValueX(): Avoid IdentifierExp, prefer direct VarExp
+  * [stable] Fix #22543 - Cannot index AA literal in global-variable 
+    initializer
+  * [stable] Fix #22501 - GC allocation for CTFE-available static array
+  * Fix issue #22535 - [REG 2.112] Unicode symbols inside q
+  * [stable] Fix #22594 - TypeInfo_Class.m_flags wrong wrt. noPointers flag
+    when the only pointers come from tuple members
+  * Fix #22625 - undefined identifier 'addr' in core.sys.posix.netinet.in
+  * Fix Issue #22567 - alias this and nested AAs cause compiler SIGILL
+  * fix issue #22556 - shared AAs with RefCounted values don't work even after
+    removing shared
+
+-------------------------------------------------------------------

Old:
----
  dmd-2.112.0.tar.gz
  phobos-2.112.0.tar.gz

New:
----
  dmd-2.112.1.tar.gz
  phobos-2.112.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ dmd.spec ++++++
--- /var/tmp/diff_new_pack.pApwAr/_old  2026-03-29 20:01:42.503943818 +0200
+++ /var/tmp/diff_new_pack.pApwAr/_new  2026-03-29 20:01:42.507943983 +0200
@@ -29,7 +29,7 @@
 BuildRequires:  phobos-devel-static
 %endif
 Name:           dmd
-Version:        2.112.0
+Version:        2.112.1
 Release:        0
 Summary:        D Programming Language 2.0
 License:        BSL-1.0

++++++ dmd-2.112.0.tar.gz -> dmd-2.112.1.tar.gz ++++++
++++ 1819 lines of diff (skipped)

++++++ phobos-2.112.0.tar.gz -> phobos-2.112.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/changelog/add_lazycache_function.dd 
new/phobos-2.112.1/changelog/add_lazycache_function.dd
--- old/phobos-2.112.0/changelog/add_lazycache_function.dd      2025-12-09 
12:21:05.000000000 +0100
+++ new/phobos-2.112.1/changelog/add_lazycache_function.dd      1970-01-01 
01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-Add lazyCache to std.algorithm.iteration
-
-The new `lazyCache` function provides a lazily evaluated range caching 
mechanism.
-Unlike `cache`, which eagerly evaluates range elements during construction,
-`lazyCache` defers evaluation until elements are explicitly requested.
-
----
-auto result = iota(-4, 5).map!(a => tuple(a, 
expensiveComputation(a)))().lazyCache();
-// No computations performed at this point
-
-auto firstElement = result.front;
-// First element is now evaluated
----
-
-See the $(REF lazyCache, std,algorithm,iteration) documentation for more 
details.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/changelog/emulate_getrandom.dd 
new/phobos-2.112.1/changelog/emulate_getrandom.dd
--- old/phobos-2.112.0/changelog/emulate_getrandom.dd   2025-12-09 
12:21:05.000000000 +0100
+++ new/phobos-2.112.1/changelog/emulate_getrandom.dd   1970-01-01 
01:00:00.000000000 +0100
@@ -1,19 +0,0 @@
-`getrandom()` backwards compatibility shim
-
-To restore compatibility with older Linux platforms where `getrandom()` is
-unavailable either due to an outdated kernel or a legacy C library, Phobos now
-ships with a shim that emulates a limited subset of `getrandom()`’s behavior
-by reading random bytes from `/dev/urandom`.
-
-To enable the shim, build DMD and Phobos with the environment variable
-`LINUX_LEGACY_EMULATE_GETRANDOM` set to `1`.
-
-```
-cd phobos
-LINUX_LEGACY_EMULATE_GETRANDOM=1 make
-```
-
-This functionality is a temporary fix and expected to be removed again soon
-by an upcoming release (approx. v2.112.0 or v2.113.0).
-The expected change is to replace the current “binding or shim” solution with
-a syscall wrapper and automatic `/dev/urandom` fallback.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/changelog/entropy_system.dd 
new/phobos-2.112.1/changelog/entropy_system.dd
--- old/phobos-2.112.0/changelog/entropy_system.dd      2025-12-09 
12:21:05.000000000 +0100
+++ new/phobos-2.112.1/changelog/entropy_system.dd      1970-01-01 
01:00:00.000000000 +0100
@@ -1,32 +0,0 @@
-Add an internal multi-backend entropy system
-
-This Phobos release introduces an internal multi-backend system for the
-retrieval of entropy (as in cryptographically-secure random numbers obtained
-from a suitable random number generator provided by the operating system).
-
-The current implementation supports the `getrandom` syscall on Linux.
-
-On BSD systems `arc4random_buf` or `getentropy` are used — depending on
-which is implemented by the OS and powered by a secure (non-RC4) algorithm.
-
-Additionally, reading entropy from the character devices `/dev/urandom` and
-`/dev/random` is available on all POSIX targets.
-
-On Windows `BCryptGenRandom` (from the
-$(I Cryptography API: Next Generation (“BCrypt”))) is provided as a backend.
-`CryptGenRandom` from the legacy $(I CryptoAPI) is not supported for the time
-being.
-
-Furthermore, this replaces the `getrandom` backwards compatibility shim
-that had been added by v2.111.1 for Linux targets.
-Instead backwards compatibility is now provided by a hunt strategy algorithm
-that tries potentially available entropy sources one by one to find one that
-is available on the running system.
-Given that the character devices serve as a fallback option here,
-`urandom` is favored over `random`. That is because modern kernel versions —
-where `random` would exhibit the usually more preferable behavior of blocking
-only until the entropy pool has been initialized — will also provide the
-`getrandom` syscall in the first place. Performing the syscall, in turn, is
-even better as it does not depend on the runtime environment exposing the
-special devices in predefined locations, thus working also within chroot
-environments.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/changelog/unicode-17.dd 
new/phobos-2.112.1/changelog/unicode-17.dd
--- old/phobos-2.112.0/changelog/unicode-17.dd  2025-12-09 12:21:05.000000000 
+0100
+++ new/phobos-2.112.1/changelog/unicode-17.dd  1970-01-01 01:00:00.000000000 
+0100
@@ -1,16 +0,0 @@
-std.uni has been upgraded from Unicode 16.0.0 to 17.0.0
-
-This Unicode update was released September 9, 2025, and adds new blocks with 
characters.
-See: https://www.unicode.org/versions/Unicode17.0.0/
-
-```
-import std;
-
-void main()
-{
-    const alphaCount = iota(0, dchar.max).filter!(std.uni.isAlpha).walkLength;
-    writeln(alphaCount);
-    // formerly: 142759
-    // now:      147421
-}
-```
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/changelog/uuidv7.dd 
new/phobos-2.112.1/changelog/uuidv7.dd
--- old/phobos-2.112.0/changelog/uuidv7.dd      2025-12-09 12:21:05.000000000 
+0100
+++ new/phobos-2.112.1/changelog/uuidv7.dd      1970-01-01 01:00:00.000000000 
+0100
@@ -1,18 +0,0 @@
-Add uuid v7 support to `std.uuid`
-
-Add uuid v7 support to the UUID type located in `std.uuid`.
-The first 48 bits of v7 stores the milliseconds since the unix epoch
-(1970-01-01), additionally 74 bit are used to store random data.
-
-Example:
----
-SysTime st = DateTime(2025, 8, 19, 10, 38, 45);
-UUID u = UUID(st);
-SysTime o = u.v7Timestamp();
-assert(o == st);
-
-string s = u.toString();
-UUID u2 = UUID(s);
-SysTime o2 = u2.v7Timestamp();
-assert(o2 == st);
----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/changelog/write-text.dd 
new/phobos-2.112.1/changelog/write-text.dd
--- old/phobos-2.112.0/changelog/write-text.dd  2025-12-09 12:21:05.000000000 
+0100
+++ new/phobos-2.112.1/changelog/write-text.dd  1970-01-01 01:00:00.000000000 
+0100
@@ -1,20 +0,0 @@
-Add `writeText`, `writeWText`, and `writeDText` to `std.conv`
-
-These functions are variants of the existing `text`, `wtext`, and `dtext`
-functions. Instead of returning a string, they write their output to an output
-range.
-
-Like `text`, `writeText` can accept an
-$(LINK2 $(ROOT_DIR)spec/istring.html, interpolated expression sequence) as an
-argument.
-
-Example:
-
----
-import std.conv : writeText;
-import std.array : appender;
-
-auto output = appender!string();
-output.writeText(i"2 + 2 == $(2 + 2)");
-assert(output.data == "2 + 2 == 4");
----
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/std/container/rbtree.d 
new/phobos-2.112.1/std/container/rbtree.d
--- old/phobos-2.112.0/std/container/rbtree.d   2025-12-09 12:21:05.000000000 
+0100
+++ new/phobos-2.112.1/std/container/rbtree.d   2026-02-28 23:32:55.000000000 
+0100
@@ -755,7 +755,7 @@
  * inserted after all existing duplicate elements.
  */
 final class RedBlackTree(T, alias less = "a < b", bool allowDuplicates = false)
-if (is(typeof((ref const T a) => binaryFun!less(a, a))))
+if (isSuitablePredicate!(less, T))
 {
     import std.meta : allSatisfy;
     import std.range : Take;
@@ -2003,7 +2003,9 @@
 }
 
 import std.range.primitives : isInputRange, ElementType;
-import std.traits : isArray, isSomeString;
+import std.traits : isArray, isSomeString, lvalueOf;
+
+private enum isSuitablePredicate(alias less, T) = 
is(typeof(binaryFun!less(lvalueOf!(const T), lvalueOf!(const T))));
 
 /++
     Convenience function for creating a `RedBlackTree!E` from a list of
@@ -2028,14 +2030,14 @@
 
 /++ Ditto +/
 auto redBlackTree(alias less, E)(E[] elems...)
-if (is(typeof(binaryFun!less(E.init, E.init))))
+if (isSuitablePredicate!(less, E))
 {
     return new RedBlackTree!(E, less)(elems);
 }
 
 /++ Ditto +/
 auto redBlackTree(alias less, bool allowDuplicates, E)(E[] elems...)
-if (is(typeof(binaryFun!less(E.init, E.init))))
+if (isSuitablePredicate!(less, E))
 {
     //We shouldn't need to instantiate less here, but for some reason,
     //dmd can't handle it if we don't (even though the template which
@@ -2059,7 +2061,7 @@
 
 /++ Ditto +/
 auto redBlackTree(alias less, Stuff)(Stuff range)
-if ( is(typeof(binaryFun!less((ElementType!Stuff).init, 
(ElementType!Stuff).init)))
+if (isSuitablePredicate!(less, ElementType!Stuff)
     && isInputRange!Stuff && !isArray!(Stuff))
 {
     return new RedBlackTree!(ElementType!Stuff, less)(range);
@@ -2067,7 +2069,7 @@
 
 /++ Ditto +/
 auto redBlackTree(alias less, bool allowDuplicates, Stuff)(Stuff range)
-if ( is(typeof(binaryFun!less((ElementType!Stuff).init, 
(ElementType!Stuff).init)))
+if (isSuitablePredicate!(less, ElementType!Stuff)
     && isInputRange!Stuff && !isArray!(Stuff))
 {
     //We shouldn't need to instantiate less here, but for some reason,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/std/internal/math/errorfunction.d 
new/phobos-2.112.1/std/internal/math/errorfunction.d
--- old/phobos-2.112.0/std/internal/math/errorfunction.d        2025-12-09 
12:21:05.000000000 +0100
+++ new/phobos-2.112.1/std/internal/math/errorfunction.d        2026-02-28 
23:32:55.000000000 +0100
@@ -984,6 +984,9 @@
 */
 real normalDistributionImpl(real a)
 {
+    if (a is -real.infinity) return 0.0L;
+    if (a is real.infinity) return 1.0L;
+
     real x = a * SQRT1_2;
     real z = fabs(x);
 
@@ -1005,6 +1008,8 @@
 {
 assert(fabs(normalDistributionImpl(1L) - (0.841344746068543L)) < 
0.0000000000000005L);
 assert(isIdentical(normalDistributionImpl(NaN(0x325)), NaN(0x325)));
+assert(normalDistributionImpl(-real.infinity) == 0.0L);
+assert(normalDistributionImpl(real.infinity) == 1.0L);
 }
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/std/internal/math/gammafunction.d 
new/phobos-2.112.1/std/internal/math/gammafunction.d
--- old/phobos-2.112.0/std/internal/math/gammafunction.d        2025-12-09 
12:21:05.000000000 +0100
+++ new/phobos-2.112.1/std/internal/math/gammafunction.d        2026-02-28 
23:32:55.000000000 +0100
@@ -137,12 +137,19 @@
 }
 
 /*
- * Helper function: Incomplete gamma function computed by Temme's expansion.
+ * Regularized incomplete gamma function computed by Temme's expansion. If
+ * `compl` is true, it computes the complement of the regularized incomplete
+ * gamma function instead.
+ *
+ * For a derivation of the algorithm, see A "Set of Algorithms for the
+ * Incomplete Gamma Functions", N. M. Temme, Probability in the Engineering and
+ * Informational Sciences, Volume 8, Issue 2, April 1994, pp. 291-307, DOI:
+ * https://doi.org/10.1017/S0269964800003417.
  *
  * This is a port of igamma_temme_large from Boost.
  *
  */
-real igammaTemmeLarge(real a, real x)
+real igammaTemmeLarge(real a, real x, bool compl)
 {
     static immutable real[][13] coef = [
         [ -0.333333333333333333333L, 0.0833333333333333333333L,
@@ -219,13 +226,12 @@
 
     // avoid nans when one of the arguments is inf:
     if (x == real.infinity && a != real.infinity)
-        return 0;
-
+        return compl ? 0.0L : 1.0L;
     if (x != real.infinity && a == real.infinity)
-        return 1;
+        return compl ? 1.0L : 0.0L;
 
     real sigma = (x - a) / a;
-    real phi = sigma - log(sigma + 1);
+    real phi = sigma - log1p(sigma);
 
     real y = a * phi;
     real z = sqrt(2 * phi);
@@ -236,14 +242,40 @@
     foreach (i; 0 .. coef.length)
         workspace[i] = poly(z, coef[i]);
 
-    real result = poly(1 / a, workspace);
-    result *= exp(-y) / sqrt(2 * PI * a);
-    if (x < a)
-        result = -result;
+    // Rₐ(𝜂) = [exp(-a𝜂²/2)/√(2𝜋a)]Sₐ(𝜂)
+    const r = exp(-y)/sqrt(2.0L*PI*a) * poly(1.0L/a, workspace);
+
+    if (compl)
+    {
+        // Q(a,x) = erfc(+𝜂√(a/2))/2 + Rₐ(𝜂)
+        return erfc(+sgn(sigma)*sqrt(y))/2.0L + r;
+    }
+    else
+    {
+        // P(a,x) = erfc(-𝜂√(a/2))/2 - Rₐ(𝜂)
+        return erfc(-sgn(sigma)*sqrt(y))/2.0L - r;
+    }
+}
 
-    result += erfc(sqrt(y)) / 2;
+@safe unittest
+{
+    // Values were generated using scipy, which restricts values to double 
precision.
+    assert(feqrel(igammaTemmeLarge(25.0, 25.0, true), 0.47339_84685_56349_37L) 
>= double.mant_dig);
+    assert(feqrel(igammaTemmeLarge(25.0, 26.0, true), 0.39592_65699_99828_5L) 
>= double.mant_dig);
+    assert(feqrel(igammaTemmeLarge(26.0, 25.0, true), 0.55292_14200_24414_8L) 
>= double.mant_dig);
+
+    assert(feqrel(igammaTemmeLarge(25.0, 25.0, false), 0.52660_15314_43650_6L) 
>= double.mant_dig);
+    assert(feqrel(igammaTemmeLarge(26.0, 25.0, false), 0.44707_85799_75585_2L) 
>= double.mant_dig);
+
+    assert(
+        feqrel(igammaTemmeLarge(30.0L,31.0L,true), 
1.0L-igammaTemmeLarge(30.0L,31.0L,false))
+        >= real.mant_dig - 1);
 
-    return result;
+    assert(feqrel(igammaTemmeLarge(1e9, 1.1e9, false), 1.0) >= 
double.mant_dig);
+    assert(feqrel(igammaTemmeLarge(1.1e9, 1e9, false), 0.0) >= 
double.mant_dig);
+
+    assert(
+        feqrel(igammaTemmeLarge(1e6, 1e6 + 1.0, true), 
0.49946_80772_57932_46L) >= double.mant_dig);
 }
 
 } // private
@@ -1660,6 +1692,9 @@
     if ( (x > 1.0L) && (x > a ) )
         return 1.0L - gammaIncompleteCompl(a,x);
 
+    if (a > 25.0L && abs(x-a) < 0.2L*a)
+        return igammaTemmeLarge(a, x, false);
+
     real ax = a * log(x) - x - logGamma(a);
 /+
     if ( ax < MINLOGL ) return 0; // underflow
@@ -1701,7 +1736,7 @@
     // log(x)-x = NaN when x = real.infinity
     const real MAXLOGL =  1.1356523406294143949492E4L;
     if (x > MAXLOGL)
-        return igammaTemmeLarge(a, x);
+        return igammaTemmeLarge(a, x, true);
 
     real ax = a * log(x) - x - logGamma(a);
 //const real MINLOGL = -1.1355137111933024058873E4L;
@@ -1910,6 +1945,9 @@
 assert(gammaIncompleteCompl(1, 0)==1);
 assert(gammaIncomplete(4545, real.infinity)==1);
 
+// Value was generated using scipy, which restricts values to double precision.
+assert(feqrel(gammaIncomplete(1e20, 1e20), 0.50000_00000_13298) >= 
double.mant_dig);
+
 // Values from Excel's (1-GammaDist(x, alpha, 1, TRUE))
 
 assert(fabs(1.0L-gammaIncompleteCompl(0.5L, 2) - 0.954499729507309L) < 
0.00000005L);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/std/signals.d 
new/phobos-2.112.1/std/signals.d
--- old/phobos-2.112.0/std/signals.d    2025-12-09 12:21:05.000000000 +0100
+++ new/phobos-2.112.1/std/signals.d    2026-02-28 23:32:55.000000000 +0100
@@ -66,11 +66,6 @@
 import core.stdc.stdlib : calloc, realloc, free;
 import std.stdio;
 
-// Special function for internal use only.
-// Use of this is where the slot had better be a delegate
-// to an object or an interface that is part of an object.
-extern (C) Object _d_toObject(void* p);
-
 // Used in place of Object.notifyRegister and Object.notifyUnRegister.
 alias DisposeEvt = void delegate(Object);
 extern (C) void  rt_attachDisposeEvent( Object obj, DisposeEvt evt );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/phobos-2.112.0/std/socket.d 
new/phobos-2.112.1/std/socket.d
--- old/phobos-2.112.0/std/socket.d     2025-12-09 12:21:05.000000000 +0100
+++ new/phobos-2.112.1/std/socket.d     2026-02-28 23:32:55.000000000 +0100
@@ -3510,7 +3510,7 @@
             if (checkError) checkError.setMinCapacity(n);
         }
 
-        int result = .select(n, fr, fw, fe, &timeout.ctimeval);
+        int result = .select(n, fr, fw, fe, timeout !is null ? 
&timeout.ctimeval : null);
 
         version (Windows)
         {

Reply via email to