testsuite: add -O0 to Intel compilers if no 'optimize' option is given
authorTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Mon, 9 Jan 2023 08:44:22 +0000 (09:44 +0100)
committerTankut Baris Aktemur <tankut.baris.aktemur@intel.com>
Mon, 9 Jan 2023 08:50:15 +0000 (09:50 +0100)
icpx/icx give the following warning if '-g' is used without '-O'.

   icpx: remark: Note that use of '-g' without any optimization-level
   option will turn off most compiler optimizations similar to use of
   '-O0'; use '-Rno-debug-disables-optimization' to disable this
   remark [-Rdebug-disables-optimization]

The warning makes dejagnu think that compilation has failed.  E.g.:

  $ make check TESTS="gdb.cp/local.exp" RUNTESTFLAGS="CXX_FOR_TARGET='icpx' CC_FOR_TARGET=icx"
  ...
  gdb compile failed, icpx: remark: Note that use of '-g' without any optimization-level option will turn off most compiler optimizations similar to use of '-O0'; use '-Rno-debug-disables-optimization' to disable this remark [-Rdebug-disables-optimization]

                  === gdb Summary ===

  # of untested testcases         1

Furthermore, if no -O flag is passed, icx/icc optimize
the code by default.  This breaks assumptions in many GDB tests
that the code is unoptimized by default.  E.g.:

  $ make check TESTS="gdb.cp/cmpd-minsyms.exp" RUNTESTFLAGS="CXX_FOR_TARGET='icpx' CC_FOR_TARGET=icx"
  ...
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at 'GDB<int>::a() const'
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at 'GDB<int>::b() volatile'
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at 'GDB<int>::c() const volatile'
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB<int>::operator ==
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB<int>::operator==(GDB<int> const&)
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB<char>::harder(char)
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB<int>::harder(int)
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at "int GDB<char>::even_harder<int>(char)"
  FAIL: gdb.cp/cmpd-minsyms.exp: gdb_breakpoint: set breakpoint at GDB<int>::simple()

                  === gdb Summary ===

  # of expected passes            1
  # of unexpected failures        9

To fix both problems, pass the -O0 flag explicitly, if no optimization
option is given.

With this patch we get, e.g.:

  $ make check TESTS="gdb.cp/cmpd-minsyms.exp gdb.cp/local.exp" RUNTESTFLAGS="CXX_FOR_TARGET='icpx' CC_FOR_TARGET=icx"
  ...
                  === gdb Summary ===

  # of expected passes            19
  # of known failures             1

Approved-By: Tom Tromey <tom@tromey.com>
gdb/testsuite/lib/gdb.exp

index 44f11a982dd0254e9fb026ae2aa2a900d205887b..c41d4698d66547978f4b335cea6635c56f6048d6 100644 (file)
@@ -4711,6 +4711,27 @@ proc gdb_compile {source dest type options} {
            lappend new_options "additional_flags=-diag-disable=10148"
        }
 
+       # icpx/icx give the following warning if '-g' is used without '-O'.
+       #
+       #   icpx: remark: Note that use of '-g' without any
+       #   optimization-level option will turn off most compiler
+       #   optimizations similar to use of '-O0'
+       #
+       # The warning makes dejagnu think that compilation has failed.
+       #
+       # Furthermore, if no -O flag is passed, icx and icc optimize
+       # the code by default.  This breaks assumptions in many GDB
+       # tests that the code is unoptimized by default.
+       #
+       # To fix both problems, pass the -O0 flag explicitly, if no
+       # optimization option is given.
+       if {[test_compiler_info "icx-*"] || [test_compiler_info "icc-*"]} {
+           if {[lsearch $options optimize=*] == -1
+               && [lsearch $options additional_flags=-O*] == -1} {
+               lappend new_options "optimize=-O0"
+           }
+       }
+
        # Starting with 2021.7.0 (recognized as icc-20-21-7 by GDB) icc and
        # icpc are marked as deprecated and both compilers emit the remark
        # #10441.  To let GDB still compile successfully, we disable these
@@ -4755,6 +4776,21 @@ proc gdb_compile {source dest type options} {
     # option is not supported so instead use the -module flag.
     # Additionally, Intel compilers need the -debug-parameters flag set to
     # emit debug info for all parameters in modules.
+    #
+    # ifx gives the following warning if '-g' is used without '-O'.
+    #
+    #   ifx: remark #10440: Note that use of a debug option
+    #   without any optimization-level option will turnoff most
+    #   compiler optimizations similar to use of '-O0'
+    #
+    # The warning makes dejagnu think that compilation has failed.
+    #
+    # Furthermore, if no -O flag is passed, Intel compilers optimize
+    # the code by default.  This breaks assumptions in many GDB
+    # tests that the code is unoptimized by default.
+    #
+    # To fix both problems, pass the -O0 flag explicitly, if no
+    # optimization option is given.
     if { !$getting_compiler_info && [lsearch -exact $options f90] != -1 } {
        # Fortran compile.
        set mod_path [standard_output_file ""]
@@ -4764,6 +4800,11 @@ proc gdb_compile {source dest type options} {
                   || [test_compiler_info {ifx-*} f90] } {
            lappend new_options "additional_flags=-module ${mod_path}"
            lappend new_options "additional_flags=-debug-parameters all"
+
+           if {[lsearch $options optimize=*] == -1
+               && [lsearch $options additional_flags=-O*] == -1} {
+               lappend new_options "optimize=-O0"
+           }
        }
     }