This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: [PATCH] Adding support to execute gdb.fortran for the flang compiler
- From: Andrew Burgess <andrew dot burgess at embecosm dot com>
- To: "Sharma, Alok Kumar" <AlokKumar dot Sharma at amd dot com>
- Cc: "gdb-patches at sourceware dot org" <gdb-patches at sourceware dot org>, "George, Jini Susan" <JiniSusan dot George at amd dot com>, "Achra, Nitika" <Nitika dot Achra at amd dot com>
- Date: Tue, 4 Feb 2020 18:27:37 +0000
- Subject: Re: [PATCH] Adding support to execute gdb.fortran for the flang compiler
- References: <DM6PR12MB3129D0643C8352BEE5DC01FB9E030@DM6PR12MB3129.namprd12.prod.outlook.com>
* 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(-)
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\\)"
--
2.14.5