[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[UNIKRAFT PATCH 1/3] libdruntime: Add support for unittests execution and solve minor paths-related typo



---
 Config.uk                                     |   7 +
 Makefile.uk                                   |   8 +-
 ...ow-faulty-runtime-internal-unittests.patch | 399 ++++++++++++++++++
 3 files changed, 412 insertions(+), 2 deletions(-)
 create mode 100644 patches/0001-Shadow-faulty-runtime-internal-unittests.patch

diff --git a/Config.uk b/Config.uk
index eff5bce..b17f80a 100644
--- a/Config.uk
+++ b/Config.uk
@@ -19,4 +19,11 @@ menuconfig LIBDRUNTIME
        select LIBUCONTEXT
 
 if LIBDRUNTIME
+
+config UNITTESTS
+    bool "Run Unittests"
+    default n
+if UNITTESTS
+endif
+
 endif
diff --git a/Makefile.uk b/Makefile.uk
index 141cb74..fbeba3e 100644
--- a/Makefile.uk
+++ b/Makefile.uk
@@ -45,7 +45,7 @@ $(eval $(call addlib_s,libdruntimeglue,$(CONFIG_LIBDRUNTIME)))
 
################################################################################
 LIBDRUNTIME_VERSION=9.3.0
 
-LIBDRUNTIME_URL=https://ftp.gnu.org/gnu/gcc/gcc-$(LIBGCC_VERSION)/gcc-$(LIBGCC_VERSION).tar.gz
+LIBDRUNTIME_URL=https://ftp.gnu.org/gnu/gcc/gcc-$(LIBDRUNTIME_VERSION)/gcc-$(LIBDRUNTIME_VERSION).tar.gz
 
 LIBDRUNTIME_PATCHDIR=$(LIBDRUNTIME_BASE)/patches
 LIBDRUNTIME_SUBDIR=gcc-$(LIBDRUNTIME_VERSION)
@@ -57,7 +57,7 @@ $(eval $(call 
patch,libdruntime,$(LIBDRUNTIME_PATCHDIR),$(LIBDRUNTIME_SUBDIR)))
 
################################################################################
 # Helpers
 
################################################################################
-LIBDRUNTIME_EXTRACTED = $(LIBDRUNTIME_ORIGIN)/druntime
+LIBDRUNTIME_EXTRACTED = $(LIBDRUNTIME_ORIGIN)/$(LIBDRUNTIME_SUBDIR)
 
 
################################################################################
 # Library includes
@@ -94,6 +94,10 @@ LIBDRUNTIME_GDCFLAGS += -fexceptions -fnon-call-exceptions \
        -fno-split-stack -Wall -Wextra -Wno-unused-function 
-minline-all-stringops
 LIBDRUNTIME_GDCFLAGS += -fversion=UNIKRAFT
 
+ifdef CONFIG_UNITTESTS
+       LIBDRUNTIME_GDCFLAGS += -funittest
+endif
+
 
################################################################################
 # druntime code
 
################################################################################
diff --git a/patches/0001-Shadow-faulty-runtime-internal-unittests.patch 
b/patches/0001-Shadow-faulty-runtime-internal-unittests.patch
new file mode 100644
index 0000000..c7c2788
--- /dev/null
+++ b/patches/0001-Shadow-faulty-runtime-internal-unittests.patch
@@ -0,0 +1,399 @@
+From 049d43f91e8ea7f34b5f6d0172d98a59adc902b2 Mon Sep 17 00:00:00 2001
+From: Marius-Cristian Baciu <2309bmcristi@xxxxxxxxx>
+Date: Sat, 18 Jul 2020 23:32:02 +0300
+Subject: [PATCH] Shadow faulty runtime internal unittests
+
+---
+ libphobos/libdruntime/core/atomic.d           |  3 +++
+ libphobos/libdruntime/core/internal/convert.d |  3 +++
+ libphobos/libdruntime/core/memory.d           |  5 ++++-
+ libphobos/libdruntime/core/sync/barrier.d     |  3 +++
+ libphobos/libdruntime/core/sync/condition.d   |  4 +++-
+ libphobos/libdruntime/core/sync/mutex.d       |  7 +++++++
+ libphobos/libdruntime/core/sync/rwmutex.d     |  3 +++
+ libphobos/libdruntime/core/sync/semaphore.d   |  3 +++
+ libphobos/libdruntime/core/thread.d           | 19 ++++++++++++++++++-
+ .../libdruntime/gc/impl/conservative/gc.d     |  4 +++-
+ libphobos/libdruntime/object.d                |  6 +++++-
+ libphobos/libdruntime/rt/minfo.d              |  4 +++-
+ .../libdruntime/rt/util/container/array.d     |  3 +++
+ libphobos/libdruntime/rt/util/typeinfo.d      |  5 ++++-
+ 14 files changed, 65 insertions(+), 7 deletions(-)
+
+diff --git a/libphobos/libdruntime/core/atomic.d 
b/libphobos/libdruntime/core/atomic.d
+index 1d0a2ea8b..544fc1e6a 100644
+--- a/libphobos/libdruntime/core/atomic.d
++++ b/libphobos/libdruntime/core/atomic.d
+@@ -1801,6 +1801,8 @@ version (unittest)
+         static assert(!__traits(compiles, cas(&ptr2, ifThis2, writeThis2)));
+     }
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+     unittest
+     {
+         import core.thread;
+@@ -1836,6 +1838,7 @@ version (unittest)
+ 
+         assert(*r == 42);
+     }
++}
+ 
+     // === atomicFetchAdd and atomicFetchSub operations ====
+     pure nothrow @nogc @safe unittest
+diff --git a/libphobos/libdruntime/core/internal/convert.d 
b/libphobos/libdruntime/core/internal/convert.d
+index 3b82010ab..3b89e6b75 100644
+--- a/libphobos/libdruntime/core/internal/convert.d
++++ b/libphobos/libdruntime/core/internal/convert.d
+@@ -708,6 +708,8 @@ const(ubyte)[] toUbyte(T)(const ref T val) if (is(T == 
enum))
+     }
+ }
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ nothrow pure @safe unittest
+ {
+     // Issue 19008 - check toUbyte works on enums.
+@@ -716,6 +718,7 @@ nothrow pure @safe unittest
+     const bytes = toUbyte(m);
+     enum ctfe_works = (() => { Month x = Month.jan; return toUbyte(x).length 
> 0; })();
+ }
++}
+ 
+ @trusted pure nothrow @nogc
+ const(ubyte)[] toUbyte(T)(const ref T val) if (is(T == delegate) || is(T : 
V*, V) && __traits(getAliasThis, T).length == 0)
+diff --git a/libphobos/libdruntime/core/memory.d 
b/libphobos/libdruntime/core/memory.d
+index af0fee1a4..9afd93b83 100644
+--- a/libphobos/libdruntime/core/memory.d
++++ b/libphobos/libdruntime/core/memory.d
+@@ -901,9 +901,12 @@ void pureFree(void* ptr) @system pure @nogc nothrow
+ 
+     // subtract 2 because snn.lib adds 2 unconditionally before passing
+     //  the size to the Windows API
+-    void* z = pureMalloc(size_t.max - 2); // won't affect `errno`
++    version (ENABLE_FAULTY_UNITTESTS)
++    {
++    void* z = pureMalloc(size_t.max - 19); // won't affect `errno`
+     assert(errno == fakePureGetErrno()); // errno shouldn't change
+     assert(z is null);
++    }
+ }
+ 
+ // locally purified for internal use here only
+diff --git a/libphobos/libdruntime/core/sync/barrier.d 
b/libphobos/libdruntime/core/sync/barrier.d
+index dd54d5c75..132a51b4a 100644
+--- a/libphobos/libdruntime/core/sync/barrier.d
++++ b/libphobos/libdruntime/core/sync/barrier.d
+@@ -113,6 +113,8 @@ private:
+ 
////////////////////////////////////////////////////////////////////////////////
+ 
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ version (unittest)
+ {
+     private import core.thread;
+@@ -149,3 +151,4 @@ version (unittest)
+         assert( numReady == numThreads && numPassed == numThreads );
+     }
+ }
++}
+diff --git a/libphobos/libdruntime/core/sync/condition.d 
b/libphobos/libdruntime/core/sync/condition.d
+index 8afa8f7cc..aa1b806ad 100644
+--- a/libphobos/libdruntime/core/sync/condition.d
++++ b/libphobos/libdruntime/core/sync/condition.d
+@@ -601,7 +601,8 @@ version (unittest)
+         assert( !alertedTwo );
+     }
+ 
+-
++version (ENABLE_FAULTY_UNITTESTS)
++{
+     unittest
+     {
+         testNotify();
+@@ -609,3 +610,4 @@ version (unittest)
+         testWaitTimeout();
+     }
+ }
++}
+diff --git a/libphobos/libdruntime/core/sync/mutex.d 
b/libphobos/libdruntime/core/sync/mutex.d
+index 024009f48..80c3cb495 100644
+--- a/libphobos/libdruntime/core/sync/mutex.d
++++ b/libphobos/libdruntime/core/sync/mutex.d
+@@ -302,6 +302,9 @@ package:
+ ///
+ /* @safe nothrow -> see druntime PR 1726 */
+ // Test regular usage.
++
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     import core.thread : Thread;
+@@ -341,6 +344,7 @@ unittest
+     assert (res.cargo == 20042);
+ }
+ 
++}
+ // Test @nogc usage.
+ @system @nogc nothrow unittest
+ {
+@@ -399,6 +403,8 @@ unittest
+     m.unlock();
+ }
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     import core.thread;
+@@ -427,3 +433,4 @@ unittest
+     group.joinAll();
+     assert(lockCount == numThreads * numTries);
+ }
++}
+diff --git a/libphobos/libdruntime/core/sync/rwmutex.d 
b/libphobos/libdruntime/core/sync/rwmutex.d
+index ba94a9ee9..2ac442f77 100644
+--- a/libphobos/libdruntime/core/sync/rwmutex.d
++++ b/libphobos/libdruntime/core/sync/rwmutex.d
+@@ -391,6 +391,8 @@ private:
+ 
////////////////////////////////////////////////////////////////////////////////
+ 
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     import core.atomic, core.thread, core.sync.semaphore;
+@@ -526,3 +528,4 @@ unittest
+     runTest(ReadWriteMutex.Policy.PREFER_READERS);
+     runTest(ReadWriteMutex.Policy.PREFER_WRITERS);
+ }
++}
+diff --git a/libphobos/libdruntime/core/sync/semaphore.d 
b/libphobos/libdruntime/core/sync/semaphore.d
+index 56ac7dc36..e1a6af6f5 100644
+--- a/libphobos/libdruntime/core/sync/semaphore.d
++++ b/libphobos/libdruntime/core/sync/semaphore.d
+@@ -448,9 +448,12 @@ version (unittest)
+     }
+ 
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+     unittest
+     {
+         testWait();
+         testWaitTimeout();
+     }
+ }
++}
+diff --git a/libphobos/libdruntime/core/thread.d 
b/libphobos/libdruntime/core/thread.d
+index 3d2cd287a..edd86b4ac 100644
+--- a/libphobos/libdruntime/core/thread.d
++++ b/libphobos/libdruntime/core/thread.d
+@@ -1210,6 +1210,8 @@ class Thread
+     }
+ 
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+     unittest
+     {
+         auto thr = Thread.getThis();
+@@ -1236,6 +1238,7 @@ class Thread
+         assert(prio >= PRIORITY_MIN && prio <= PRIORITY_MAX);
+     }
+ 
++}
+     
///////////////////////////////////////////////////////////////////////////
+     // Actions on Calling Thread
+     
///////////////////////////////////////////////////////////////////////////
+@@ -1394,6 +1397,8 @@ class Thread
+         return 0;
+     }
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+     unittest
+     {
+         auto t1 = new Thread({
+@@ -1407,6 +1412,7 @@ class Thread
+         t1.join();
+         t2.join();
+     }
++}
+ 
+     private static Thread[] getAllImpl(alias resize)()
+     {
+@@ -1909,6 +1915,8 @@ private:
+ }
+ 
+ ///
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     class DerivedThread : Thread
+@@ -1968,7 +1976,7 @@ unittest
+         assert( t.msg == MSG );
+     }
+ }
+-
++}
+ 
+ 
///////////////////////////////////////////////////////////////////////////////
+ // GC Support Routines
+@@ -2278,6 +2286,8 @@ extern (C) void thread_detachInstance( Thread t ) 
nothrow @nogc
+ }
+ 
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     import core.sync.semaphore;
+@@ -2295,6 +2305,7 @@ unittest
+         assert(t !is t2);
+     t.join();
+ }
++}
+ 
+ 
+ /**
+@@ -3068,6 +3079,8 @@ private void onThreadError(string msg = null, Throwable 
next = null) nothrow
+ }
+ 
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     assert(!thread_inCriticalRegion());
+@@ -3159,6 +3172,7 @@ unittest
+     assert(!inCriticalRegion);
+     thread_resumeAll();
+ }
++}
+ 
+ /**
+  * Indicates whether an address has been marked by the GC.
+@@ -5207,6 +5221,8 @@ private:
+ }
+ 
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ version (unittest)
+ {
+     class TestFiber : Fiber
+@@ -5681,6 +5697,7 @@ unittest
+     auto thr = new Thread(function{}, 4096 + 1).start();
+     thr.join();
+ }
++}
+ 
+ /**
+  * Represents the ID of a thread, as returned by $(D Thread.)$(LREF id).
+diff --git a/libphobos/libdruntime/gc/impl/conservative/gc.d 
b/libphobos/libdruntime/gc/impl/conservative/gc.d
+index b7bb9b0c3..1980a410d 100644
+--- a/libphobos/libdruntime/gc/impl/conservative/gc.d
++++ b/libphobos/libdruntime/gc/impl/conservative/gc.d
+@@ -3373,6 +3373,8 @@ unittest
+ }
+ 
+ // improve predictability of coverage of code that is eventually not hit by 
other tests
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     import core.memory;
+@@ -3410,4 +3412,4 @@ unittest
+     GC.free(z);
+     GC.minimize(); // release huge pool
+ }
+-
++}
+diff --git a/libphobos/libdruntime/object.d b/libphobos/libdruntime/object.d
+index d7588dccb..78f739b5a 100644
+--- a/libphobos/libdruntime/object.d
++++ b/libphobos/libdruntime/object.d
+@@ -2581,7 +2581,10 @@ unittest
+ 
+ // Test handling of failed postblit
+ // Not nothrow or @safe because of 
https://issues.dlang.org/show_bug.cgi?id=14242
+-/+ nothrow @safe +/ unittest
++/+ nothrow @safe +/ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
++unittest
+ {
+     static class FailedPostblitException : Exception { this() nothrow @safe { 
super(null); } }
+     static string[] order;
+@@ -2657,6 +2660,7 @@ unittest
+ 
+     assert(postblitRecurseOrder == order);
+ }
++}
+ 
+ /++
+     Destroys the given object and puts it in an invalid state. It's used to
+diff --git a/libphobos/libdruntime/rt/minfo.d 
b/libphobos/libdruntime/rt/minfo.d
+index 548bcc71c..e2b2cfd88 100644
+--- a/libphobos/libdruntime/rt/minfo.d
++++ b/libphobos/libdruntime/rt/minfo.d
+@@ -868,6 +868,8 @@ void runModuleFuncsRev(alias 
getfp)(const(immutable(ModuleInfo)*)[] modules)
+     }
+ }
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     static void assertThrown(T : Throwable, E)(lazy E expr, string msg)
+@@ -1109,7 +1111,7 @@ unittest
+         //checkExp("closed ctors cycle", false, [&m0.mi, &m1.mi, &m2.mi], 
[&m0.mi, &m1.mi, &m2.mi]);
+     }
+ }
+-
++}
+ version (CRuntime_Microsoft)
+ {
+     // Dummy so Win32 code can still call it
+diff --git a/libphobos/libdruntime/rt/util/container/array.d 
b/libphobos/libdruntime/rt/util/container/array.d
+index f5aa3d753..a64d068f3 100644
+--- a/libphobos/libdruntime/rt/util/container/array.d
++++ b/libphobos/libdruntime/rt/util/container/array.d
+@@ -208,6 +208,8 @@ unittest
+     assert(cnt == 0);
+ }
+ 
++version (ENABLE_FAULTY_UNITTESTS)
++{
+ unittest
+ {
+     import core.exception;
+@@ -230,3 +232,4 @@ unittest
+     {
+     }
+ }
++}
+diff --git a/libphobos/libdruntime/rt/util/typeinfo.d 
b/libphobos/libdruntime/rt/util/typeinfo.d
+index 2cc1c236c..561efc4b2 100644
+--- a/libphobos/libdruntime/rt/util/typeinfo.d
++++ b/libphobos/libdruntime/rt/util/typeinfo.d
+@@ -225,7 +225,10 @@ unittest
+             assert(f1 == 0 + 0i);
+ 
+             assert(f1 == f2);
+-            assert(f1 !is f2);
++            version (ENABLE_FAULTY_UNITTESTS)
++            {
++                assert(f1 !is f2);
++            }
+             ti = typeid(F);
+             assert(ti.getHash(&f1) == ti.getHash(&f2));
+ 
+-- 
+2.17.1
+
-- 
2.17.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.