Adding support to execute gdb.fortran for the flang compiler

Message ID 20200204182737.GC4020@embecosm.com
State New, archived
Headers

Commit Message

Andrew Burgess Feb. 4, 2020, 6:27 p.m. UTC
  * Sharma, Alok Kumar <AlokKumar.Sharma@amd.com> [2020-02-04 16:17:13 +0000]:

> Hi All,
> 
> Problem Description:
> 
> When gdb.fortran testsuite is executed with the flang compiler, many
> tests fail. For an example below test case
> $ make check RUNTESTFLAGS=' CC_FOR_TARGET="flang"' \
>   TESTS="gdb.fortran/vla-datatypes.exp"
> Test case fails for below testpoint
>    gdb_test "ptype intvla" "type = $int, allocatable \\\(11,22,33\\\)"
> 
> Root cause:
> 
> Output from gdb.log
>    ptype intvla^M
>    type = integer(kind=4), allocatable (11,22,33)^M
>   (gdb) FAIL: gdb.fortran/vla-datatypes.exp: ptype intvla
> Though the actual output is correct, due to the wrong value of $int
> the output is identified as FAIL.
> Please check the below code form "lib/fortran.exp".
> --------------------------------------
> proc fortran_int4 {} {
>     if {[test_compiler_info {gcc-4-[012]-*}]} {
>         return "int4"
>     } elseif {[test_compiler_info {gcc-*}]} {
>         return "integer\\(kind=4\\)"
>     } elseif {[test_compiler_info {icc-*}]} {
>         return "INTEGER\\(4\\)"
>     } else {
>         return "unknown"
>     }
> }
> --------------------------------------
> As evident from code for the flang compiler $int is derived as "unknown".
> 
> Resolution:
> 
> To fix this, support for the flang is added in file lib/fortran.exp
> 
> Testing:
> 
> - There was no regression seen
> 
> Please let me know your comments.

Thank you for this.

There is a copyright assignment in place for AMD to GDB, so I went
ahead and committed this.  The exact patch I pushed is included
below.

Thanks again,
Andrew

---

gdb/fortran: Allow for using Flang in Fortran testing

In lib/fortran.exp, in the helper function fortran_int4, there is
currently no support for the LLVM Fortran compiler, Flang.  As a
result we return the default pattern 'unknown' to match against all
4-byte integer types, which causes many tests to fail.

The same is true for all of the other helper functions related to
finding a suitable type pattern.

This commit adds support for Flang.  There should be no change when
testing with gfortran.

gdb/testsuite/ChangeLog:

	* lib/fortran.exp (fortran_int4): Handle clang.
	(fortran_int8): Likewise.
	(fortran_real4): Likewise.
	(fortran_real8): Likewise.
	(fortran_complex4): Likewise.
	(fortran_logical4): Likewise.
	(fortran_character1): Likewise.

Change-Id: Ife0d9828f78361fbd992bf21af746042b017dafc
---
 gdb/testsuite/ChangeLog       | 10 ++++++++++
 gdb/testsuite/lib/fortran.exp | 21 ++++++++++++++-------
 2 files changed, 24 insertions(+), 7 deletions(-)
  

Patch

diff --git a/gdb/testsuite/lib/fortran.exp b/gdb/testsuite/lib/fortran.exp
index 0c2627d82a9..54f32936773 100644
--- a/gdb/testsuite/lib/fortran.exp
+++ b/gdb/testsuite/lib/fortran.exp
@@ -32,7 +32,8 @@  proc set_lang_fortran {} {
 proc fortran_int4 {} {
     if {[test_compiler_info {gcc-4-[012]-*}]} {
 	return "int4"
-    } elseif {[test_compiler_info {gcc-*}]} {
+    } elseif {[test_compiler_info {gcc-*}]
+	      || [test_compiler_info {clang-*}]} {
 	return "integer\\(kind=4\\)"
     } elseif {[test_compiler_info {icc-*}]} {
 	return "INTEGER\\(4\\)"
@@ -44,7 +45,8 @@  proc fortran_int4 {} {
 proc fortran_int8 {} {
     if {[test_compiler_info {gcc-4-[012]-*}]} {
 	return "int8"
-    } elseif {[test_compiler_info {gcc-*}]} {
+    } elseif {[test_compiler_info {gcc-*}]
+	      || [test_compiler_info {clang-*}]} {
 	return "integer\\(kind=8\\)"
     } elseif {[test_compiler_info {icc-*}]} {
 	return "INTEGER\\(8\\)"
@@ -56,7 +58,8 @@  proc fortran_int8 {} {
 proc fortran_real4 {} {
     if {[test_compiler_info {gcc-4-[012]-*}]} {
 	return "real4"
-    } elseif {[test_compiler_info {gcc-*}]} {
+    } elseif {[test_compiler_info {gcc-*}]
+	      || [test_compiler_info {clang-*}]} {
 	return "real\\(kind=4\\)"
     } elseif {[test_compiler_info {icc-*}]} {
 	return "REAL\\(4\\)"
@@ -68,7 +71,8 @@  proc fortran_real4 {} {
 proc fortran_real8 {} {
     if {[test_compiler_info {gcc-4-[012]-*}]} {
 	return "real8"
-    } elseif {[test_compiler_info {gcc-*}]} {
+    } elseif {[test_compiler_info {gcc-*}]
+	      || [test_compiler_info {clang-*}]} {
 	return "real\\(kind=8\\)"
     } elseif {[test_compiler_info {icc-*}]} {
 	return "REAL\\(8\\)"
@@ -80,7 +84,8 @@  proc fortran_real8 {} {
 proc fortran_complex4 {} {
     if {[test_compiler_info {gcc-4-[012]-*}]} {
 	return "complex4"
-    } elseif {[test_compiler_info {gcc-*}]} {
+    } elseif {[test_compiler_info {gcc-*}]
+	      || [test_compiler_info {clang-*}]} {
 	return "complex\\(kind=4\\)"
     } elseif {[test_compiler_info {icc-*}]} {
 	return "COMPLEX\\(4\\)"
@@ -92,7 +97,8 @@  proc fortran_complex4 {} {
 proc fortran_logical4 {} {
     if {[test_compiler_info {gcc-4-[012]-*}]} {
 	return "logical4"
-    } elseif {[test_compiler_info {gcc-*}]} {
+    } elseif {[test_compiler_info {gcc-*}]
+	      || [test_compiler_info {clang-*}]} {
 	return "logical\\(kind=4\\)"
     } elseif {[test_compiler_info {icc-*}]} {
 	return "LOGICAL\\(4\\)"
@@ -104,7 +110,8 @@  proc fortran_logical4 {} {
 proc fortran_character1 {} {
     if {[test_compiler_info {gcc-4-[012]-*}]} {
 	return "character1"
-    } elseif {[test_compiler_info {gcc-*}]} {
+    } elseif {[test_compiler_info {gcc-*}]
+	      || [test_compiler_info {clang-*}]} {
 	return "character\\(kind=1\\)"
     } elseif {[test_compiler_info {icc-*}]} {
 	return "CHARACTER\\(1\\)"