diff --git a/gdb/ChangeLog b/gdb/ChangeLog index a5580fde4d..d7f237edc0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2021-03-15 Tom Tromey + + * ada-lang.c (ada_unop_ind_operation::evaluate): Call + ada_ensure_varsize_limit. + 2021-03-15 Tom Tromey * ada-lang.c (numeric_type_p, integer_type_p): Return true for diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index a74f540848..1fc303a5c0 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -10480,6 +10480,11 @@ ada_unop_ind_operation::evaluate (struct type *expect_type, (CORE_ADDR) value_as_address (arg1)); } + struct type *target_type = (to_static_fixed_type + (ada_aligned_type + (ada_check_typedef (TYPE_TARGET_TYPE (type))))); + ada_ensure_varsize_limit (target_type); + if (ada_is_array_descriptor_type (type)) /* GDB allows dereferencing GNAT array descriptors. */ return ada_coerce_to_simple_array (arg1); diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 728405e960..aa6cacb6ad 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2021-03-15 Tom Tromey + + * gdb.ada/varsize_limit.exp: Add new test. + * gdb.ada/varsize_limit/vsizelim.adb: Update. + 2021-03-15 Tom Tromey * gdb.ada/operator_call/twovecs.ads: New file. diff --git a/gdb/testsuite/gdb.ada/varsize_limit.exp b/gdb/testsuite/gdb.ada/varsize_limit.exp index eebb5d05de..aca926a79a 100644 --- a/gdb/testsuite/gdb.ada/varsize_limit.exp +++ b/gdb/testsuite/gdb.ada/varsize_limit.exp @@ -37,4 +37,4 @@ gdb_test "print small" " = \"1234567890\"" gdb_test "print larger" "object size is larger than varsize-limit.*" - +gdb_test "print name.all" "object size is larger than varsize-limit.*" diff --git a/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb b/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb index 058994ce88..3b19e722eb 100644 --- a/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb +++ b/gdb/testsuite/gdb.ada/varsize_limit/vsizelim.adb @@ -14,10 +14,24 @@ -- along with this program. If not, see . with Pck; use Pck; +with System; +with Unchecked_Conversion; + procedure VsizeLim is Small : String := Ident ("1234567890"); Larger : String := Ident ("1234567890|1234567890|1234567890"); + + type String_Ptr is access all String; + type Big_String_Ptr is access all String (Positive); + + function To_Ptr is + new Unchecked_Conversion (System.Address, Big_String_Ptr); + + Name_Str : String_Ptr := new String'(Larger); + Name : Big_String_Ptr := To_Ptr (Name_Str.all'Address); + begin Do_Nothing (Small'Address); -- STOP Do_Nothing (Larger'Address); + Do_Nothing (Name'Address); end VsizeLim;