mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-30 13:23:50 +08:00

Running the AdaCore internal test suite with -fgnat-encodings=minimal found a gdb crash. The bug is that GDB ends up with a typedef in ada_index_type, resulting in a NULL dereference. This crash can be reproduced using GCC 11 with the included test case. Tested on x86-64 Fedora 32. Because this is Ada-specific, and was already reviewed by Joel, I am going to check it in. 2021-04-30 Tom Tromey <tromey@adacore.com> * ada-lang.c (ada_index_type): Use ada_check_typedef. gdb/testsuite/ChangeLog 2021-04-30 Tom Tromey <tromey@adacore.com> * gdb.ada/enum_idx_packed/pck.ads (My_Enum, My_Array_Type) (Confused_Array): New types. * gdb.ada/enum_idx_packed/foo.adb (Confused_Array): New variable. * gdb.ada/enum_idx_packed.exp: Add new tests.
42 lines
1.7 KiB
Ada
42 lines
1.7 KiB
Ada
-- Copyright 2012-2021 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/>.
|
|
|
|
with Pck; use Pck;
|
|
|
|
procedure Foo is
|
|
Full : Full_Table := (False, True, False, True, False);
|
|
Primary : Primary_Table := (False, True, False);
|
|
Cold : Cold_Table := (False, True);
|
|
Small : Small_Table := New_Small_Table (Low => Red, High => Green);
|
|
Multi : Multi_Table := New_Multi_Table (Red, Green, Low, Medium);
|
|
Multi_Multi : Multi_Multi_Table := New_Multi_Multi_Table (1, 2, 1, 7, 1, 10);
|
|
Multi_Access : Multi_Dimension_Access
|
|
:= new Multi_Dimension'(True => (1, 1, 2, 3, 5),
|
|
False => (8, 13, 21, 34, 55));
|
|
|
|
Confused_Array : Confused_Array_Type := (Red => (0, 1, 2),
|
|
Green => (5, 6, 7),
|
|
others => (others => 72));
|
|
|
|
begin
|
|
Do_Nothing (Full'Address); -- STOP
|
|
Do_Nothing (Primary'Address);
|
|
Do_Nothing (Cold'Address);
|
|
Do_Nothing (Small'Address);
|
|
Do_Nothing (Multi'Address);
|
|
Do_Nothing (Multi_Multi'Address);
|
|
Do_Nothing (Multi_Access'Address);
|
|
end Foo;
|