}
}
-/* True iff TYPE is discrete (INT, RANGE, ENUM). */
+/* True iff TYPE is discrete, as defined in the Ada Reference Manual.
+ This essentially means one of (INT, RANGE, ENUM) -- but note that
+ "enum" includes character and boolean as well. */
static int
discrete_type_p (struct type *type)
case TYPE_CODE_RANGE:
case TYPE_CODE_ENUM:
case TYPE_CODE_BOOL:
+ case TYPE_CODE_CHAR:
return 1;
default:
return 0;
--- /dev/null
+# Copyright 2022 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Tests that require character to be a discrete type.
+
+load_lib "ada.exp"
+
+if { [skip_ada_tests] } { return -1 }
+
+standard_ada_testfile main
+
+if {[gdb_compile_ada "${srcfile}" "${binfile}" executable {debug}] != ""} {
+ return -1
+}
+
+clean_restart ${testfile}
+
+set bp_location [gdb_get_line_number "STOP" ${testdir}/main.adb]
+if {![runto "main.adb:$bp_location"]} then {
+ perror "Couldn't run ${testfile}"
+ return
+}
+
+gdb_test_no_output "set print array-indexes on"
+gdb_test "print array_value" \
+ [string_to_regexp "= (65 'A' => true, 66 'B' => false <repeats 24 times>, 90 'Z' => true)"]
+
+gdb_test "print character'val(65)" " = 65 'A'"
+gdb_test "print character'pos('A')" " = 65"
+gdb_test "print character'first" [string_to_regexp " = 0 '\[\"00\"\]'"]
--- /dev/null
+-- Copyright 2022 Free Software Foundation, Inc.
+--
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU General Public License as published by
+-- the Free Software Foundation; either version 3 of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU General Public License for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+procedure Main is
+ type Letters is new Character range 'A' .. 'Z';
+ type Array_Type is array (Letters) of Boolean;
+
+ Array_Value : Array_Type := ('A' => true, 'Z' => true, others => false);
+begin
+ null; -- STOP
+end Main;