Hi,

This patch alters the way the D2 testsuite is ran.

- All compilable tests now default to being compiled, rather than
  assembled.  A new directive has been added "LINK" to set the test
  action to link.

- Unless the test explicitly requests, all compilable tests as well as
  fail_compilation tests will be ran without any extra flags.

- The C++ tests now are checked against shared D runtime library.

Tested on x86_64-linux-gnu, and committed to mainline.

Regards
Iain.

---
gcc/testsuite/ChangeLog:

        * lib/gdc-utils.exp (gdc-convert-test): Handle LINK directive.
        Set PERMUTE_ARGS as DEFAULT_DFLAGS only for runnable tests.
        (gdc-do-test): Set default action of compilable tests to compile.
        Test SHARED_OPTION on runnable_cxx tests.
---
 gcc/testsuite/lib/gdc-utils.exp | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/gcc/testsuite/lib/gdc-utils.exp b/gcc/testsuite/lib/gdc-utils.exp
index 37c1620f307..b1f90b8f92e 100644
--- a/gcc/testsuite/lib/gdc-utils.exp
+++ b/gcc/testsuite/lib/gdc-utils.exp
@@ -192,6 +192,7 @@ proc gdc-copy-extra { base extra } {
 #   PERMUTE_ARGS:      The set of arguments to permute in multiple compiler
 #                      invocations.  An empty set means only one permutation
 #                      with no arguments.
+#   LINK:              Enables linking.
 #   TEST_OUTPUT:       The output expected from the compilation.
 #   POST_SCRIPT:       Not handled.
 #   REQUIRED_ARGS:     Arguments to add to the compiler command line.
@@ -203,12 +204,13 @@ proc gdc-convert-test { base test } {
     global PERMUTE_ARGS
     global GDC_EXECUTE_ARGS
 
-    set PERMUTE_ARGS $DEFAULT_DFLAGS
+    set PERMUTE_ARGS ""
     set GDC_EXECUTE_ARGS ""
 
     set extra_sources ""
     set extra_files ""
     set needs_phobos 0
+    set saw_test_flags 0
 
     upvar 1 compilable_do_what compilable_do_what
     set compilable_output_file_ext ""
@@ -237,6 +239,10 @@ proc gdc-convert-test { base test } {
            # DISABLED is not handled.
            regsub -- {DISABLED.*$} $copy_line "" out_line
 
+       } elseif [regexp -- {LINK:} $copy_line] {
+           # LINK sets dg-do-what-default "link"
+           set compilable_do_what "link"
+
        } elseif [regexp -- {POST_SCRIPT} $copy_line] {
            # POST_SCRIPT is not handled
            regsub -- {POST_SCRIPT.*$} $copy_line "" out_line
@@ -246,14 +252,13 @@ proc gdc-convert-test { base test } {
            if { $args != "" } {
                error "gdc-convert-test: DFLAGS is not empty as expected"
            }
-           if { $PERMUTE_ARGS == $DEFAULT_DFLAGS } {
-               set PERMUTE_ARGS ""
-           }
+           set saw_test_flags 1
            regsub -- {DFLAGS.*$} $copy_line "" out_line
 
        } elseif [regexp -- {PERMUTE_ARGS\s*:\s*(.*)} $copy_line match args] {
            # PERMUTE_ARGS is handled by gdc-do-test.
            set PERMUTE_ARGS [gdc-convert-args $args]
+           set saw_test_flags 1
            regsub -- {PERMUTE_ARGS.*$} $copy_line "" out_line
 
        } elseif [regexp -- {EXECUTE_ARGS\s*:\s*(.*)} $copy_line match args] {
@@ -339,6 +344,7 @@ proc gdc-convert-test { base test } {
     # Fail compilable are successful if an output is not generated.
     # Runnable must compile, link, and return 0 to be successful by default.
     switch $type {
+       runnable_cxx -
        runnable {
            if ![isnative] {
                puts $fdout "// { dg-final { output-exists } }"
@@ -346,6 +352,11 @@ proc gdc-convert-test { base test } {
            if $needs_phobos {
                puts $fdout "// { dg-skip-if \"imports phobos\" { ! 
d_runtime_has_std_library } }"
            }
+           # Run runnable tests with all default permutations if not
+           # explicitly set in the test file.
+           if !$saw_test_flags {
+               set PERMUTE_ARGS $DEFAULT_DFLAGS
+           }
        }
 
        compilable {
@@ -353,7 +364,6 @@ proc gdc-convert-test { base test } {
 
            # Compilable test may require checking another kind of output file.
            if { $compilable_output_file_ext != "" } {
-               set compilable_do_what "compile"
                # Check that file generation tests output the expected file.
                set genfile "[file rootname $name].$compilable_output_file_ext"
                puts $fdout "// { dg-final { if \[file exists $genfile\] \\{    
       } }"
@@ -370,11 +380,6 @@ proc gdc-convert-test { base test } {
        }
 
        fail_compilation {
-           # Fail compilation tests only check for language errors from the
-           # front-end.  No need to run all permutations of the default DFLAGS.
-           if { $PERMUTE_ARGS == $DEFAULT_DFLAGS } {
-               set PERMUTE_ARGS ""
-           }
            puts $fdout "// { dg-final { output-exists-not } }"
        }
     }
@@ -451,11 +456,11 @@ proc gdc-do-test { testcases } {
        # Convert to DG test.
        set imports [format "-I%s/%s" $base $type]
        set cleanup_extra_files ""
-       set compilable_do_what "assemble"
+       set compilable_do_what "compile"
        # Include $testdir prefix so test names follow DejaGnu conventions.
        set filename "$testdir/[gdc-convert-test $base $type/$name.$ext]"
 
-       if { $type == "runnable" } {
+       if { $type == "runnable" || $type == "runnable_cxx" } {
            append PERMUTE_ARGS " $SHARED_OPTION"
        }
 
-- 
2.25.1

Reply via email to