https://gcc.gnu.org/g:606e815b8427976d801e572b8c571bf030a51ff8

commit 606e815b8427976d801e572b8c571bf030a51ff8
Author: Alexandre Oliva <ol...@adacore.com>
Date:   Tue Jun 11 21:44:55 2024 -0300

    [testsuite] add linkonly to dg-additional-sources [PR115295]
    
    The D testsuite shows it was a mistake to assume that
    dg-additional-sources are never to be used for compilation tests.
    Even if an output file is specified for compilation, extra module
    files can be named and used in the compilation without being flagged
    as errors.
    
    Introduce a 'linkonly' flag for dg-additional-sources, and use it in
    pr95401.cc, so that its additional sources get discarded when vector
    tests downgrade to compile-only.
    
    
    for  gcc/ChangeLog
    
            * doc/sourcebuild.texi (dg-additional-sources): Add linkonly.
    
    for  gcc/testsuite/ChangeLog
    
            * g++.dg/vect/pr95401.cc: Add linkonly to dg-additional-sources.
            * lib/gcc-defs (additional_sources_omit_on_compile): New.
            (dg-additional-sources): Add to it on linkonly.
            (dg-additional-files-options): Omit select sources on compile.

Diff:
---
 gcc/doc/sourcebuild.texi             |  9 +++++----
 gcc/testsuite/g++.dg/vect/pr95401.cc |  2 +-
 gcc/testsuite/lib/gcc-defs.exp       | 35 ++++++++++++++++++++++++++++-------
 3 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index e997dbec3334..08c178db674c 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -1320,15 +1320,16 @@ to @var{var_value} before execution of the program 
created by the test.
 Specify additional files, other than source files, that must be copied
 to the system where the compiler runs.
 
-@item @{ dg-additional-sources "@var{filelist}" [@{ target @var{selector} @}] 
@}
+@item @{ dg-additional-sources "@var{filelist}" [@{ \[linkonly\] \[target 
@var{selector}\] @}] @}
 Specify additional source files to appear in the compile line
 following the main test file.
 If the directive includes the optional @samp{@{ @var{selector} @}}
 then the additional sources are only added if the target system
 matches the @var{selector}.
-Additional sources are generally used only in @samp{link} and @samp{run}
-tests; they are reported as unsupported and discarded in other kinds of
-tests that direct the compiler to output to a single file.
+If @samp{linkonly} is specified, additional sources are used only in
+@samp{link} and @samp{run} tests; they are reported as unsupported and
+discarded in other kinds of tests that direct the compiler to output to
+a single file.
 @end table
 
 @subsubsection Add checks at the end of a test
diff --git a/gcc/testsuite/g++.dg/vect/pr95401.cc 
b/gcc/testsuite/g++.dg/vect/pr95401.cc
index 6a56dab09572..8b1be4f24252 100644
--- a/gcc/testsuite/g++.dg/vect/pr95401.cc
+++ b/gcc/testsuite/g++.dg/vect/pr95401.cc
@@ -1,5 +1,5 @@
 // { dg-additional-options "-mavx2 -O3" { target avx2_runtime } }
-// { dg-additional-sources pr95401a.cc }
+// { dg-additional-sources pr95401a.cc linkonly }
 
 extern int var_9;
 extern unsigned var_14;
diff --git a/gcc/testsuite/lib/gcc-defs.exp b/gcc/testsuite/lib/gcc-defs.exp
index cdca4c254d6e..c6ec490f0092 100644
--- a/gcc/testsuite/lib/gcc-defs.exp
+++ b/gcc/testsuite/lib/gcc-defs.exp
@@ -303,18 +303,26 @@ proc dg-additional-options { args } {
 # main source file.
 
 set additional_sources ""
+set additional_sources_omit_on_compile ""
 set additional_sources_used ""
 
 proc dg-additional-sources { args } {
     global additional_sources
+    global additional_sources_omit_on_compile
 
     if { [llength $args] > 3 } {
        error "[lindex $args 0]: too many arguments"
        return
     }
 
-    if { [llength $args] >= 3 } {
-       switch [dg-process-target [lindex $args 2]] {
+    set target [lindex $args 2]
+    if { [llength $args] >= 3 && [lindex $target 0] == "linkonly" } {
+       append additional_sources_omit_on_compile " [lindex $args 1]"
+       set target [lreplace $target 0 1]
+    }
+
+    if { [llength $args] >= 3 && $target != ""} {
+       switch [dg-process-target $target] {
            "S" { append additional_sources " [lindex $args 1]" }
            "N" { }
            "F" { error "[lindex $args 0]: `xfail' not allowed here" }
@@ -407,16 +415,29 @@ proc dg-additional-files-options { options source dest 
type } {
     gcc_adjust_linker_flags
 
     global additional_sources
+    global additional_sources_omit_on_compile
     global additional_sources_used
     global additional_files
     set to_download [list]
-    if { $additional_sources == "" } then {
-    } elseif { $type != "executable" && $dest != "" } then {
+    if { $additional_sources_omit_on_compile != "" \
+            && $additional_sources != "" \
+            && $type != "executable" && $dest != "" } then {
+       set linkonly ""
        foreach s $additional_sources {
-           unsupported "$s: additional-source will not be used to build $dest"
+           foreach s2 $additional_sources_omit_on_compile {
+               if { $s == $s2 } {
+                   unsupported "$s: additional-source will not be used to 
build $dest"
+                   set s ""
+                   break
+               }
+           }
+           if { $s != "" } {
+               append linkonly " $s"
+           }
        }
-       set additional_sources_used ""
-       set additional_sources ""
+       set additional_sources "$linkonly"
+    }
+    if { $additional_sources == "" } then {
     } else {
        if [is_remote host] {
            lappend options "additional_flags=$additional_sources"

Reply via email to