From 2d3a1837bcf31c9a622d810d29179081613346df Mon Sep 17 00:00:00 2001 From: Olivier Hainque Date: Mon, 28 Sep 2009 17:00:46 +0000 Subject: [PATCH] ada/ * gcc-interface/targtyps.c * (get_target_default_allocator_alignment): Account for observable alignments out of default allocators. testsuite/ * gnat.dg (tagged_alloc_free.adb): New testcase. From-SVN: r152243 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/gcc-interface/targtyps.c | 13 +++++++++++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/tagged_alloc_free.adb | 22 +++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/tagged_alloc_free.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 8e4c061c04b..dd0657407ef 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2009-09-28 Olivier Hainque + + * gcc-interface/targtyps.c (get_target_default_allocator_alignment): + Account for observable alignments out of default allocators. + 2009-09-28 Richard Henderson * gcc-interface/utils.c (gnat_install_builtins): Update call to diff --git a/gcc/ada/gcc-interface/targtyps.c b/gcc/ada/gcc-interface/targtyps.c index 716550e397f..9bc8f0e42ec 100644 --- a/gcc/ada/gcc-interface/targtyps.c +++ b/gcc/ada/gcc-interface/targtyps.c @@ -160,10 +160,21 @@ get_target_maximum_default_alignment (void) handy and what alignment it honors). In the meantime, resort to malloc considerations only. */ +/* Account for MALLOC_OBSERVABLE_ALIGNMENTs here. Use this or the ABI + guaranteed alignment if greater. */ + +#ifdef MALLOC_OBSERVABLE_ALIGNMENT +#define MALLOC_ALIGNMENT MALLOC_OBSERVABLE_ALIGNMENT +#else +#define MALLOC_OBSERVABLE_ALIGNMENT (2 * LONG_TYPE_SIZE) +#define MALLOC_ALIGNMENT \ + MAX (MALLOC_ABI_ALIGNMENT, MALLOC_OBSERVABLE_ALIGNMENT) +#endif + Pos get_target_default_allocator_alignment (void) { - return MALLOC_ABI_ALIGNMENT / BITS_PER_UNIT; + return MALLOC_ALIGNMENT / BITS_PER_UNIT; } /* Standard'Maximum_Allowed_Alignment. Maximum alignment that we may diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 566d5be7035..098dc2da113 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2009-09-28 Olivier Hainque + + * gnat.dg (tagged_alloc_free.adb): New testcase. + 2009-09-28 Janis Johnson * g++.dg/dfp: New directory. diff --git a/gcc/testsuite/gnat.dg/tagged_alloc_free.adb b/gcc/testsuite/gnat.dg/tagged_alloc_free.adb new file mode 100644 index 00000000000..d26916dcb6e --- /dev/null +++ b/gcc/testsuite/gnat.dg/tagged_alloc_free.adb @@ -0,0 +1,22 @@ +-- { dg-do run } + +with Ada.Unchecked_Deallocation; +with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; + +procedure Tagged_Alloc_Free is + + type Test_Base is tagged null record; + type Test_Class_Access is access all Test_Base'Class; + type Test_Extension is new Test_Base with record + Last_Name : Unbounded_String := Null_Unbounded_String; + end record; + + procedure Free is new Ada.Unchecked_Deallocation + (Object => Test_Base'Class, + Name => Test_Class_Access); + + Handle : Test_Class_Access := new Test_Extension; + +begin + Free (Handle); +end;