From: Rainer Orth Date: Sun, 25 Nov 2018 15:59:44 +0000 (+0000) Subject: Disable gdc execution tests without libphobos X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6d9434e5954ef5a450a8bd3fd3c3961545bc1d9c;p=gcc.git Disable gdc execution tests without libphobos 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2bff937cbcf..343ea3803e9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-11-25 Rainer Orth + + * doc/sourcebuild.texi (Effective-Target Keywords, Environment + attributes): Document d_runtime. + 2018-11-25 Vladimir Makarov PR bootstrap/88157 diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi index 3fdf5e331c4..7734941511a 100644 --- a/gcc/doc/sourcebuild.texi +++ b/gcc/doc/sourcebuild.texi @@ -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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e761b2c48c9..5a4b5a2a490 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2018-11-25 Rainer Orth + + * 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 PR fortran/88143 diff --git a/gcc/testsuite/gdc.dg/lto/lto.exp b/gcc/testsuite/gdc.dg/lto/lto.exp index 1fed9cdd2ce..9df69cf80df 100644 --- a/gcc/testsuite/gdc.dg/lto/lto.exp +++ b/gcc/testsuite/gdc.dg/lto/lto.exp @@ -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 diff --git a/gcc/testsuite/gdc.dg/runnable.d b/gcc/testsuite/gdc.dg/runnable.d index 4f1ef76e4cb..ec172fae810 100644 --- a/gcc/testsuite/gdc.dg/runnable.d +++ b/gcc/testsuite/gdc.dg/runnable.d @@ -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; diff --git a/gcc/testsuite/lib/gdc-dg.exp b/gcc/testsuite/lib/gdc-dg.exp index e5d9f1d9cb7..67672595ac3 100644 --- a/gcc/testsuite/lib/gdc-dg.exp +++ b/gcc/testsuite/lib/gdc-dg.exp @@ -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] diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp index c2a944738cc..37791cfcf9d 100644 --- a/gcc/testsuite/lib/target-supports.exp +++ b/gcc/testsuite/lib/target-supports.exp @@ -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 { } {