Disable gdc execution tests without libphobos
authorRainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Sun, 25 Nov 2018 15:59:44 +0000 (15:59 +0000)
committerRainer Orth <ro@gcc.gnu.org>
Sun, 25 Nov 2018 15:59:44 +0000 (15:59 +0000)
gcc/testsuite:
* lib/target-supports.exp (check_compile): Handle D.
(check_effective_target_d_runtime): New proc.
* lib/gdc-dg.exp (gdc-dg-test): Demote link and run tests to
compile unless d_runtime.
* gdc.dg/runnable.d: Skip unless d_runtime.
* gdc.dg/lto/lto.exp: Require d_runtime to run tests.

gcc:
* doc/sourcebuild.texi (Effective-Target Keywords, Environment
attributes): Document d_runtime.

From-SVN: r266438

gcc/ChangeLog
gcc/doc/sourcebuild.texi
gcc/testsuite/ChangeLog
gcc/testsuite/gdc.dg/lto/lto.exp
gcc/testsuite/gdc.dg/runnable.d
gcc/testsuite/lib/gdc-dg.exp
gcc/testsuite/lib/target-supports.exp

index 2bff937cbcfec8289a91ba3c395a0a0df71ef290..343ea3803e944f194e777367ce7e1cf1dca159f6 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * doc/sourcebuild.texi (Effective-Target Keywords, Environment
+       attributes): Document d_runtime.
+
 2018-11-25  Vladimir Makarov  <vmakarov@redhat.com>
 
        PR bootstrap/88157
index 3fdf5e331c4ddd9caad8a17316af1fb988bd5f63..7734941511ac77f0e9ca3f357d846243a1977b89 100644 (file)
@@ -2106,6 +2106,9 @@ Target provides a full C99 runtime.
 Target @code{string.h} and @code{wchar.h} headers provide C++ required
 overloads for @code{strchr} etc. functions.
 
+@item d_runtime
+Target provides the D runtime.
+
 @item dummy_wcsftime
 Target uses a dummy @code{wcsftime} function that always returns zero.
 
index e761b2c48c961ad55566fd79d81315a9c59fd773..5a4b5a2a490c6c7637aa9624421743e165631eb7 100644 (file)
@@ -1,3 +1,12 @@
+2018-11-25  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * lib/target-supports.exp (check_compile): Handle D.
+       (check_effective_target_d_runtime): New proc.
+       * lib/gdc-dg.exp (gdc-dg-test): Demote link and run tests to
+       compile unless d_runtime.
+       * gdc.dg/runnable.d: Skip unless d_runtime.
+       * gdc.dg/lto/lto.exp: Require d_runtime to run tests.
+
 2018-11-24  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/88143
index 1fed9cdd2ceecdb1f319933248997b2923eebe40..9df69cf80dfdb73118ecef650b31518fbb7e4621 100644 (file)
@@ -36,6 +36,11 @@ if { ![check_effective_target_lto] } {
     return
 }
 
+# Likewise if the D runtime library is missing.
+if { ![check_effective_target_d_runtime] } {
+    return
+}
+
 lto_init no-mathlib
 
 # Define an identifier for use with this suite to avoid name conflicts
index 4f1ef76e4cb24026c633a47e07fcdec092c86d33..ec172fae8109f7b13d4dc2b2fff39ce9c7ab120f 100644 (file)
@@ -1,5 +1,6 @@
 // { dg-additional-sources "imports/runnable.d" }
 // { dg-do run { target hw } }
+// { dg-skip-if "needs gcc/config.d" { ! d_runtime } }
 
 module runnable;
 
index e5d9f1d9cb73f1e10eb23273038542958cde1465..67672595ac361d354848d62f2e96a3fc7003dcc5 100644 (file)
@@ -19,6 +19,19 @@ load_lib gcc-dg.exp
 # Define gdc callbacks for dg.exp.
 
 proc gdc-dg-test { prog do_what extra_tool_flags } {
+    upvar dg-do-what dg-do-what
+
+    # Demote link and run tests to compile-only if D runtime is missing.
+    if ![check_effective_target_d_runtime] {
+       switch $do_what {
+           link -
+           run {
+               set do_what compile
+               set dg-do-what compile
+           }
+       }
+    }
+
     set result \
         [gcc-dg-test-1 gdc_target_compile $prog $do_what $extra_tool_flags]
 
index c2a944738ccf8e1efc5249d0420ddeac1934cb31..37791cfcf9df58e21fb6120af7f07998242e2ac3 100644 (file)
@@ -31,6 +31,7 @@
 # Assume by default that CONTENTS is C code.  
 # Otherwise, code should contain:
 # "// C++" for c++,
+# "// D" for D,
 # "! Fortran" for Fortran code,
 # "/* ObjC", for ObjC
 # "// ObjC++" for ObjC++
@@ -58,6 +59,7 @@ proc check_compile {basename type contents args} {
     switch -glob -- $contents {
        "*! Fortran*" { set src ${basename}[pid].f90 }
        "*// C++*" { set src ${basename}[pid].cc }
+       "*// D*" { set src ${basename}[pid].d }
        "*// ObjC++*" { set src ${basename}[pid].mm }
        "*/* ObjC*" { set src ${basename}[pid].m }
        "*// Go*" { set src ${basename}[pid].go }
@@ -7154,6 +7156,19 @@ proc check_effective_target_c99_runtime { } {
     }]
 }
 
+# Return 1 if the target provides the D runtime.
+
+proc check_effective_target_d_runtime { } {
+    return [check_no_compiler_messages d_runtime executable {
+       // D
+       module mod;
+
+       extern(C) int main() {
+           return 0;
+       }
+    }]
+}
+
 # Return 1 if  target wchar_t is at least 4 bytes.
 
 proc check_effective_target_4byte_wchar_t { } {