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:
parent
73cd74f8e7
commit
1ff2474966
4 changed files with 48 additions and 3 deletions
|
@ -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>
|
2011-07-16 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
* doc/install.texi: Document --enable-static-libjava.
|
* doc/install.texi: Document --enable-static-libjava.
|
||||||
|
|
|
@ -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>
|
2011-07-17 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR fortran/49624
|
PR fortran/49624
|
||||||
|
|
31
gcc/testsuite/gnat.dg/pointer_controlled.adb
Normal file
31
gcc/testsuite/gnat.dg/pointer_controlled.adb
Normal 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;
|
|
@ -10596,9 +10596,14 @@ walk_tree_1 (tree *tp, walk_tree_fn func, void *data,
|
||||||
if (result || !walk_subtrees)
|
if (result || !walk_subtrees)
|
||||||
return 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);
|
result = walk_type_fields (*type_p, func, data, pset, lh);
|
||||||
if (result)
|
if (result)
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/* If this is a record type, also walk the fields. */
|
/* If this is a record type, also walk the fields. */
|
||||||
if (RECORD_OR_UNION_TYPE_P (*type_p))
|
if (RECORD_OR_UNION_TYPE_P (*type_p))
|
||||||
|
|
Loading…
Add table
Reference in a new issue