aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.ada/enum_idx_packed.exp
diff options
context:
space:
mode:
authorTom Tromey <tromey@adacore.com>2020-11-04 08:49:16 -0700
committerTom Tromey <tromey@adacore.com>2020-11-04 08:49:18 -0700
commitb72795a8f573c36aaeedd1a64f58ad52b4c72439 (patch)
tree54804ce534e446f4d09d9afb74ea26e2a7043214 /gdb/testsuite/gdb.ada/enum_idx_packed.exp
parent24aa1b028236fff1b1cf04e8cadcc2e7b4c72aab (diff)
downloadgdb-b72795a8f573c36aaeedd1a64f58ad52b4c72439.zip
gdb-b72795a8f573c36aaeedd1a64f58ad52b4c72439.tar.gz
gdb-b72795a8f573c36aaeedd1a64f58ad52b4c72439.tar.bz2
Fix bit strides for -fgnat-encodings=minimal
With -fgnat-encodings=minimal, the enum_idx_packed.exp test will fail. In this test case, we have an array (with dynamic length) of arrays, and the inner array has a bit stride. In this situation, the outer array's bit stride must be updated to account for the entire bit length of the inner array. Here, again, some tests must be kfail'd when an older version of GNAT is in use. gdb/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdbtypes.c (update_static_array_size): Handle bit stride. gdb/testsuite/ChangeLog 2020-11-04 Tom Tromey <tromey@adacore.com> * gdb.ada/enum_idx_packed.exp: Test two forms of -fgnat-encodings.
Diffstat (limited to 'gdb/testsuite/gdb.ada/enum_idx_packed.exp')
-rw-r--r--gdb/testsuite/gdb.ada/enum_idx_packed.exp121
1 files changed, 80 insertions, 41 deletions
diff --git a/gdb/testsuite/gdb.ada/enum_idx_packed.exp b/gdb/testsuite/gdb.ada/enum_idx_packed.exp
index 480de71..9185968 100644
--- a/gdb/testsuite/gdb.ada/enum_idx_packed.exp
+++ b/gdb/testsuite/gdb.ada/enum_idx_packed.exp
@@ -19,64 +19,103 @@ if { [skip_ada_tests] } { return -1 }
standard_ada_testfile foo
-if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
- return -1
-}
+foreach_with_prefix scenario {all minimal} {
+ set flags [list debug additional_flags=-fgnat-encodings=$scenario]
-clean_restart ${testfile}
+ if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} {
+ return -1
+ }
-set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
-runto "foo.adb:$bp_location"
+ clean_restart ${testfile}
-gdb_test "ptype full" \
- "type = array \\(black \\.\\. white\\) of boolean <packed: 1-bit elements>"
+ # GNAT >= 11.0 has the needed fix here.
+ if {$scenario == "minimal" && ![test_compiler_info {gcc-1[1-9]-*}]} {
+ set old_compiler 1
+ } else {
+ set old_compiler 0
+ }
-gdb_test "print full" " = \\(false, true, false, true, false\\)"
+ set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
+ runto "foo.adb:$bp_location"
-gdb_test "print full'first" " = black"
+ gdb_test "ptype full" \
+ "type = array \\(black \\.\\. white\\) of boolean <packed: 1-bit elements>"
-gdb_test "ptype primary" \
- "type = array \\(red \\.\\. blue\\) of boolean <packed: 1-bit elements>"
+ gdb_test "print full" " = \\(false, true, false, true, false\\)"
-gdb_test "print primary" " = \\(red => false, true, false\\)"
+ gdb_test "print full'first" " = black"
-gdb_test "print primary'first" " = red"
+ gdb_test "ptype primary" \
+ "type = array \\(red \\.\\. blue\\) of boolean <packed: 1-bit elements>"
-gdb_test "ptype cold" \
- "type = array \\(green \\.\\. blue\\) of boolean <packed: 1-bit elements>"
+ gdb_test "print primary" " = \\(red => false, true, false\\)"
-gdb_test "print cold" " = \\(green => false, true\\)"
+ gdb_test "print primary'first" " = red"
-gdb_test "print cold'first" " = green"
+ gdb_test "ptype cold" \
+ "type = array \\(green \\.\\. blue\\) of boolean <packed: 1-bit elements>"
-# Note the bounds values are still not correctly displayed. So we get
-# the enum equivalent of "1 .. 0" (empty range) as the array ranges.
-# Accept that for now.
-gdb_test "ptype small" \
- "array \\(red \\.\\. green\\) of boolean <packed: 1-bit elements>"
+ gdb_test "print cold" " = \\(green => false, true\\)"
-gdb_test "print small" " = \\(red => false, true\\)"
+ gdb_test "print cold'first" " = green"
-gdb_test "print small'first" " = red"
+ # Note the bounds values are still not correctly displayed. So we get
+ # the enum equivalent of "1 .. 0" (empty range) as the array ranges.
+ # Accept that for now.
+ # GNAT >= 11.0 has the needed fix here.
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "ptype small" \
+ "array \\(red \\.\\. green\\) of boolean <packed: 1-bit elements>"
-gdb_test "ptype multi" \
- "array \\(red \\.\\. green, low .. medium\\) of boolean <packed: 1-bit elements>"
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "print small" " = \\(red => false, true\\)"
-gdb_test "print multi" \
- " = \\(red => \\(low => true, false\\), \\(low => true, false\\)\\)"
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "print small'first" " = red"
-gdb_test "print multi'first" " = red"
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "ptype multi" \
+ "array \\(red \\.\\. green, low .. medium\\) of boolean <packed: 1-bit elements>"
-set base "\\(true, false, true, false, true, false, true, false, true, false\\)"
-set matrix "\\("
-foreach x {1 2 3 4 5 6 7} {
- if {$x > 1} {
- append matrix ", "
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
}
- append matrix $base
-}
-append matrix "\\)"
+ gdb_test "print multi" \
+ " = \\(red => \\(low => true, false\\), \\(low => true, false\\)\\)"
-gdb_test "print multi_multi" " = \\($matrix, $matrix\\)"
-gdb_test "print multi_multi(1,3)" " = $base"
-gdb_test "print multi_multi(2)" " = $matrix"
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "print multi'first" " = red"
+
+ set base "\\(true, false, true, false, true, false, true, false, true, false\\)"
+ set matrix "\\("
+ foreach x {1 2 3 4 5 6 7} {
+ if {$x > 1} {
+ append matrix ", "
+ }
+ append matrix $base
+ }
+ append matrix "\\)"
+
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "print multi_multi" " = \\($matrix, $matrix\\)"
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "print multi_multi(1,3)" " = $base"
+ if {$old_compiler} {
+ setup_kfail "minimal encodings" *-*-*
+ }
+ gdb_test "print multi_multi(2)" " = $matrix"
+}