In the LTO testsuite, tests run by default with a variety of options. If
the dg-lto-options directive is used, the default list is replaced with just
the requested options, so there is no convenient way, for instance, to add a
given option like -Wall to all of the options being tested.

This will be handy for testing `#pragma GCC diagnostic' in the next patch in
this series, so this patch adds a new directive dg-lto-additional-options
for that purpose. This keeps the list of options to test unchanged, and
just adds the requested options to all of them.

gcc/testsuite/ChangeLog:

        * gcc.dg/lto/README: Document dg-lto-additional-options directive.
        * lib/lto.exp (lto-get-options-main): Implement
        dg-lto-additional-options directive.
        (lto-execute-1): Likewise.
---
 gcc/testsuite/gcc.dg/lto/README |  2 ++
 gcc/testsuite/lib/lto.exp       | 22 ++++++++++++++++++----
 2 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/gcc/testsuite/gcc.dg/lto/README b/gcc/testsuite/gcc.dg/lto/README
index 6777c15766a..1ee8b00dee8 100644
--- a/gcc/testsuite/gcc.dg/lto/README
+++ b/gcc/testsuite/gcc.dg/lto/README
@@ -8,6 +8,8 @@ The LTO harness recognizes the following special DejaGnu 
directives:
  *  dg-lto-options - the equivalent of dg-options with additional syntax
       to support different sets of options for different files compiled
       as part of the same test case,
+ *  dg-lto-additional-options - the equivalent of dg-additional-options;
+      adds to the default options instead of overwriting them
  *  dg-lto-warning - the equivalent of dg-warning for diagnostics expected
       to be emitted at LTO link time,
  *  dg-lto-message - the equivakent of dg-message for informational notes
diff --git a/gcc/testsuite/lib/lto.exp b/gcc/testsuite/lib/lto.exp
index a35a3fc3a74..89c86a0f779 100644
--- a/gcc/testsuite/lib/lto.exp
+++ b/gcc/testsuite/lib/lto.exp
@@ -492,6 +492,7 @@ proc lto-get-options-main { src } {
 
     # dg-options sets a variable called dg-extra-tool-flags.
     set dg-extra-tool-flags ""
+    set lto-additional-tool-flags ""
 
     # dg-options sets a variable called tool_flags.
     set tool_flags ""
@@ -526,6 +527,18 @@ proc lto-get-options-main { src } {
                unresolved "$src: $errmsg for \"$op\""
                return
            }
+       } elseif { [string match "dg-lto-additional-options" $cmd] } {
+           set op [lreplace $op 0 0 "dg-additional-options"]
+           set saved-dg-extra-tool-flags "${dg-extra-tool-flags}"
+           set dg-extra-tool-flags "${lto-additional-tool-flags}"
+           set status [catch "$op" errmsg]
+           if { $status != 0 } {
+               perror "src: $errmsg for \"$op\"\n"
+               unresolved "$src: $errmsg for \"$op\""
+               return
+           }
+           set lto-additional-tool-flags "${dg-extra-tool-flags}"
+           set dg-extra-tool-flags "${saved-dg-extra-tool-flags}"
        } elseif { ![string compare "dg-xfail-if" $cmd] \
                   || ![string compare "dg-options" $cmd] } {
            warning "lto.exp does not support $cmd in primary source file"
@@ -595,7 +608,8 @@ proc lto-get-options-main { src } {
     # Return flags to use for compiling the primary source file and for
     # linking.
     verbose "dg-extra-tool-flags for main is ${dg-extra-tool-flags}"
-    return ${dg-extra-tool-flags}
+    verbose "lto-additional-tool-flags for main is 
${lto-additional-tool-flags}"
+    return [list ${dg-extra-tool-flags} ${lto-additional-tool-flags}]
 }
 
 
@@ -677,7 +691,7 @@ proc lto-execute-1 { src1 sid } {
     set compile_type "run"
     set dg-do-what [list ${dg-do-what-default} "" P]
     array set dg-messages-by-file [list]
-    set extra_flags(0) [lto-get-options-main $src1]
+    lassign [lto-get-options-main $src1] extra_flags(0) additional-flags
     set compile_xfail(0) "" 
 
     # If the main file defines dg-options, those flags are used to
@@ -796,7 +810,7 @@ proc lto-execute-1 { src1 sid } {
        # Compile pieces with the compiler under test.
        set i 0
        foreach src $src_list obj $obj_list {
-           lto-obj $src $obj $option $extra_flags($i) $option \
+           lto-obj $src $obj $option "$extra_flags($i) ${additional-flags}" 
$option \
                    $compile_xfail($i)
            incr i
        }
@@ -832,7 +846,7 @@ proc lto-execute-1 { src1 sid } {
 
            lto-link-and-maybe-run \
                    "[lindex $obj_list 0]-[lindex $obj_list end]" \
-                   $obj_list $execname $filtered ${dg-extra-ld-options} \
+               $obj_list $execname $filtered "${additional-flags} 
${dg-extra-ld-options}" \
                    $filtered
 
            if (![string compare "ar-link" $compile_type]) {

Reply via email to