re PR middle-end/49732 (crash on terminal_interface-curses-menus.adb from ncurses with -gnato)

PR middle-end/49732
	* tree.c (walk_tree_1) <DECL_EXPR>: Do not walk a pointed-to type.

From-SVN: r176371
This commit is contained in:
Eric Botcazou 2011-07-17 15:06:36 +00:00 committed by Eric Botcazou
parent 73cd74f8e7
commit 1ff2474966
4 changed files with 48 additions and 3 deletions

View file

@ -1,3 +1,8 @@
2011-07-17 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/49732
* tree.c (walk_tree_1) <DECL_EXPR>: Do not walk a pointed-to type.
2011-07-16 Matthias Klose <doko@ubuntu.com>
* doc/install.texi: Document --enable-static-libjava.

View file

@ -1,3 +1,7 @@
2011-07-17 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/pointer_controlled.adb: New test.
2011-07-17 Tobias Burnus <burnus@net-b.de>
PR fortran/49624

View file

@ -0,0 +1,31 @@
-- PR ada/49732
-- Testcase by Vorfeed Canal
-- { dg-do compile }
-- { dg-options "-gnato" }
with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
with Interfaces.C.Pointers;
procedure Pointer_Controlled is
function Create (Name : String) return size_t is
type Name_String is new char_array (0 .. Name'Length);
type Name_String_Ptr is access Name_String;
pragma Controlled (Name_String_Ptr);
Name_Str : constant Name_String_Ptr := new Name_String;
Name_Len : size_t;
begin
To_C (Name, Name_Str.all, Name_Len);
return 1;
end;
Test : size_t;
begin
Test := Create("ABC");
end;

View file

@ -10596,9 +10596,14 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
if (result || !walk_subtrees)
return result;
result = walk_type_fields (*type_p, func, data, pset, lh);
if (result)
return result;
/* But do not walk a pointed-to type since it may itself need to
be walked in the declaration case if it isn't anonymous. */
if (!POINTER_TYPE_P (*type_p))
{
result = walk_type_fields (*type_p, func, data, pset, lh);
if (result)
return result;
}
/* If this is a record type, also walk the fields. */
if (RECORD_OR_UNION_TYPE_P (*type_p))