aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNils-Christian Kempke <nils-christian.kempke@intel.com>2022-05-20 17:15:44 +0200
committerIjaz, Abdul B <abdul.b.ijaz@intel.com>2023-09-08 00:35:18 +0200
commit6fe8aea3c0b848cfca8a9dbeb6df42d51af2b18c (patch)
tree29698c188159b69f0d7a35a154f7b2aa8fbbe38d
parent85832a8c3c91c8ac39b8c6ef50a4894a55b17ab2 (diff)
downloadgdb-6fe8aea3c0b848cfca8a9dbeb6df42d51af2b18c.zip
gdb-6fe8aea3c0b848cfca8a9dbeb6df42d51af2b18c.tar.gz
gdb-6fe8aea3c0b848cfca8a9dbeb6df42d51af2b18c.tar.bz2
testsuite, fortran: Remove self assignment non-statements
There were a couple of places in the testsuite where instructions like var = var were written in the source code of tests. These were usually dummy statements meant to generate a line table entry at that line on which to break later on. This worked fine for gfortran and ifx, but it seems that, when compiled with ifort (2021.6.0) these statements do not actually create any assmbler instructions and especially no line table entries. Consider the program program test Integer var :: var = 1 var = var end program compiled with gfortran (13.0.0, -O0 -g). The linetable as emitted by 'objdump --dwarf=decodedline ./a.out' looks like test.f90: File name Line number Starting address View Stmt test.f90 1 0x401172 x test.f90 3 0x401176 x test.f90 4 0x401182 x test.f90 4 0x401185 x test.f90 4 0x401194 x test.f90 - 0x4011c0 actually containing line table info for line 3. Running gdb, breaking at 3 and checking the assembly we see 0x0000000000401172 <+0>: push %rbp 0x0000000000401173 <+1>: mov %rsp,%rbp => 0x0000000000401176 <+4>: mov 0x2ebc(%rip),%eax # 0x404038 <var.1> 0x000000000040117c <+10>: mov %eax,0x2eb6(%rip) # 0x404038 <var.1> 0x0000000000401182 <+16>: nop 0x0000000000401183 <+17>: pop %rbp 0x0000000000401184 <+18>: ret so two mov instructions are being issued for this assignment one copying the value into a register and one writing it back to the same memory. Ifort (2021.6.0, -O0 -g) on the other hand does not emit anything here and also has no line table entry: test.f90: File name Line number Starting address View Stmt test.f90 1 0x4040f8 x test.f90 4 0x404109 x test.f90 4 0x40410e x test.f90 - 0x404110 As I do not think that this is really a bug (on either side, gfortran/ifx or ifort), and as I don't think this behavior is covered in the Fortran standard, I changed these lines to become actual value assignments. This removes a few FAILs in the testsuite when ran with ifort. Approved-by: Tom Tromey <tom@tromey.com>
-rw-r--r--gdb/testsuite/gdb.fortran/library-module-lib.f902
-rw-r--r--gdb/testsuite/gdb.fortran/library-module-main.f902
-rw-r--r--gdb/testsuite/gdb.fortran/module.f9011
3 files changed, 8 insertions, 7 deletions
diff --git a/gdb/testsuite/gdb.fortran/library-module-lib.f90 b/gdb/testsuite/gdb.fortran/library-module-lib.f90
index 89e5f3f..24a7a8f 100644
--- a/gdb/testsuite/gdb.fortran/library-module-lib.f90
+++ b/gdb/testsuite/gdb.fortran/library-module-lib.f90
@@ -19,7 +19,7 @@ contains
subroutine lib_func
if (var_i .ne. 1) call abort
var_i = 2
- var_i = var_i ! i-is-2-in-lib
+ var_i = 2 ! i-is-2-in-lib
end subroutine lib_func
end module lib
diff --git a/gdb/testsuite/gdb.fortran/library-module-main.f90 b/gdb/testsuite/gdb.fortran/library-module-main.f90
index 6b5fe87..85f9e6f 100644
--- a/gdb/testsuite/gdb.fortran/library-module-main.f90
+++ b/gdb/testsuite/gdb.fortran/library-module-main.f90
@@ -19,5 +19,5 @@
call lib_func
if (var_i .ne. 2) call abort
if (var_j .ne. 3) call abort
- var_i = var_i ! i-is-2-in-main
+ var_i = 7 ! i-is-2-in-main
end
diff --git a/gdb/testsuite/gdb.fortran/module.f90 b/gdb/testsuite/gdb.fortran/module.f90
index 4aaf224..fba899b 100644
--- a/gdb/testsuite/gdb.fortran/module.f90
+++ b/gdb/testsuite/gdb.fortran/module.f90
@@ -40,18 +40,19 @@ end module moduse
subroutine sub1
use mod1
if (var_i .ne. 1) call abort
- var_i = var_i ! i-is-1
+ var_i = 1 ! i-is-1
end
subroutine sub2
use mod2
if (var_i .ne. 2) call abort
- var_i = var_i ! i-is-2
+ var_i = 2 ! i-is-2
end
subroutine sub3
- USE mod3
- var_i = var_i ! i-is-3
+ use mod3
+ if (var_i .ne. 3) call abort
+ var_i = 3 ! i-is-3
END
program module
@@ -68,5 +69,5 @@ end module moduse
if (var_i .ne. 14) call abort
if (var_x .ne. 30) call abort
if (var_z .ne. 31) call abort
- var_b = var_b ! a-b-c-d
+ var_b = 11 ! a-b-c-d
end