Re: [RFA] Fix mi-var-child-f.exp failures

Keith Seitz
2013-07-26T15:08:51Z

On 07/26/2013 07:23 AM, Tom Tromey wrote:
>>>>>> "Keith" == Keith Seitz <keiths@redhat.com> writes:
>
> Keith> 2013-07-25 Keith Seitz <keiths@redhat.com>
> Keith> * gdb.mi/mi-var-child-f.exp: Use mi_create_varobj.
> Keith> Use mi_list_varobj_children for the immediate children of `array'.
> Keith> Add "has_more" attribute for grandchildren test.
>
> This is ok. Thanks.
>
> On irc you said this happens if you don't have f77 installed.
> Is there a way to make the test also work with gfortran?
> I think f77 is mostly dead.

Yes, pass F77_FOR_TARGET=gfortran in RUNTESTFLAGS. Alas, that exposes
another problem with the test. The type of "array" is reported as
"integer(kind=4)" with gfortran (simply "integer" with g77). There's a
blurb about/solution to this in gdb.fortran/multi-dim.exp which I've stolen.

I've also changed the compile settings to use F90 instead of F77. This
will make this test use gfortran instead of g77. The purpose of this
test is to test varobj not f77.

Ok?
Keith

testsuite/ChangeLog
2013-07-26 Keith Seitz <keiths@redhat.com>

* gdb.mi/mi-var-child-f.exp: Pass f90 to gdb_compile instead
of f77.
Allow for compiler variations of integer types.
Use mi_create_varobj.
Use mi_list_varobj_children for the immediate children of `array'.
Add "has_more" attribute for grandchildren test.

diff --git a/gdb/testsuite/gdb.mi/mi-var-child-f.exp
b/gdb/testsuite/gdb.mi/mi-var-child-f.exp
index 762a90d..79d49bd 100644
--- a/gdb/testsuite/gdb.mi/mi-var-child-f.exp
+++ b/gdb/testsuite/gdb.mi/mi-var-child-f.exp
@@ -28,7 +28,7 @@ if [mi_gdb_start] {
standard_testfile array.f

if {[gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \
- executable {debug f77}] != ""} {
+ executable {debug f90}] != ""} {
return -1
}

@@ -37,14 +37,20 @@ mi_gdb_load ${binfile}

mi_runto MAIN__

-mi_gdb_test "-var-create array * array" \
- "\\^done,name=\"array\",numchild=\"3\",value=\".*\",type=\"integer
\\(2,-1:1\\)\"" \
- "create local variable array"
+mi_create_varobj "array" "array" "create local variable array"

-mi_gdb_test "-var-list-children --all-values array" \
-
"\\^done,numchild=\"3\",children=\\\[child=\{name=\"array.-1\",exp=\"-1\",numchild=\"2\",value=\"\\\[2\\\]\",type=\"integer
\\(2\\)\"\},child=\{name=\"array.0\",exp=\"0\",numchild=\"2\",value=\"\\\[2\\\]\",type=\"integer
\\(2\\)\"\},child=\{name=\"array.1\",exp=\"1\",numchild=\"2\",value=\"\\\[2\\\]\",type=\"integer
\\(2\\)\"\}\\\]" \
- "get children of array"
+
+# Depending on the compiler version being used, the name of the 4-byte
integer
+# and real types can be printed differently. For instance,
gfortran-4.1 uses
+# "int4" whereas gfortran-4.3 uses "integer(kind=4)".
+set int4 "(int4|integer\\(kind=4\\))"
+
+set children [list [list "array.-1" "-1" 2 "$int4 \\(2\\)"] \
+ [list "array.0" "0" 2 "$int4 \\(2\\)"] \
+ [list "array.1" "1" 2 "$int4 \\(2\\)"]]
+
+mi_list_varobj_children "array" $children "get children of array"

mi_gdb_test "-var-list-children --all-values array.-1" \
-
"\\^done,numchild=\"2\",children=\\\[child=\{name=\"array.-1.1\",exp=\"1\",numchild=\"0\",value=\"11\",type=\"integer\"\},child=\{name=\"array.-1.2\",exp=\"2\",numchild=\"0\",value=\"21\",type=\"integer\"\}\\\]"
\
+
"\\^done,numchild=\"2\",children=\\\[child=\{name=\"array.-1.1\",exp=\"1\",numchild=\"0\",value=\"11\",type=\"$int4\"\},child=\{name=\"array.-1.2\",exp=\"2\",numchild=\"0\",value=\"21\",type=\"$int4\"\}\\\],has_more=\"0\""
\
"get grandchildren of array (children of first element of second
index)"