Adding support to execute gdb.fortran for the flang compiler

Message ID DM6PR12MB31299C8A0EB45D57160F8CF79E020@DM6PR12MB3129.namprd12.prod.outlook.com
State New, archived
Headers

Commit Message

Sharma, Alok Kumar Feb. 5, 2020, 5:15 a.m. UTC
  [AMD Official Use Only - Internal Distribution Only]

Thanks a lot Andrew.

Regards,
Alok

-----Original Message-----
From: Andrew Burgess <andrew.burgess@embecosm.com> 
Sent: Tuesday, February 4, 2020 11:58 PM
To: Sharma, Alok Kumar <AlokKumar.Sharma@amd.com>
Cc: gdb-patches@sourceware.org; George, Jini Susan <JiniSusan.George@amd.com>; Achra, Nitika <Nitika.Achra@amd.com>
Subject: Re: [PATCH] Adding support to execute gdb.fortran for the flang compiler

[CAUTION: External Email]

* 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(-)

     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\\)"
--
2.14.5
  

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 {} {