diff options
author | Olivier Hainque <hainque@adacore.com> | 2008-05-06 12:13:07 +0000 |
---|---|---|
committer | Olivier Hainque <hainque@gcc.gnu.org> | 2008-05-06 12:13:07 +0000 |
commit | 2b9d6cf30e659c40d8458b22c6400f6da7bb0856 (patch) | |
tree | bcc397612d49065a6c04523a7d57b48fb68c575e /gcc | |
parent | 18efb1796541e7ebc9f9634755bfaf5c21a17773 (diff) | |
download | gcc-2b9d6cf30e659c40d8458b22c6400f6da7bb0856.zip gcc-2b9d6cf30e659c40d8458b22c6400f6da7bb0856.tar.gz gcc-2b9d6cf30e659c40d8458b22c6400f6da7bb0856.tar.bz2 |
tree-sra.c (try_instantiate_multiple_fields): Early return if field has POINTER_TYPE.
* tree-sra.c (try_instantiate_multiple_fields): Early return
if field has POINTER_TYPE.
testsuite/
* gnat.dg/fatp_sra.adb: New test.
From-SVN: r134982
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/fatp_sra.adb | 17 | ||||
-rw-r--r-- | gcc/tree-sra.c | 4 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8e9790..1fe2793 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-05-06 Olivier Hainque <hainque@adacore.com> + + * tree-sra.c (try_instantiate_multiple_fields): Early return + if field has POINTER_TYPE. + 2008-05-06 Kai Tietz <kai.tietz@onevision.com> * config/i386/i386.c (output_set_got): Fix for x86_64 output_emit_asm diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ecae395..25e806f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2008-05-06 Olivier Hainque <hainque@adacore.com> + + * gnat.dg/fatp_sra.adb: New test. + 2008-05-05 Andrew Pinski <andrew_pinski@playstation.sony.com> PR middle-end/36141 diff --git a/gcc/testsuite/gnat.dg/fatp_sra.adb b/gcc/testsuite/gnat.dg/fatp_sra.adb new file mode 100644 index 0000000..a964737 --- /dev/null +++ b/gcc/testsuite/gnat.dg/fatp_sra.adb @@ -0,0 +1,17 @@ +-- { dg-do compile } +-- { dg-options "-gnatp -O1" } + +procedure Fatp_Sra is + + function X return String is + begin + return "X"; + end; + + function Letter return String is + begin + return X; + end; +begin + null; +end; diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c index 78a100f..9e15f92 100644 --- a/gcc/tree-sra.c +++ b/gcc/tree-sra.c @@ -1472,6 +1472,10 @@ try_instantiate_multiple_fields (struct sra_elt *elt, tree f) tree type, var; struct sra_elt *block; + /* Point fields are typically best handled as standalone entities. */ + if (POINTER_TYPE_P (TREE_TYPE (f))) + return f; + if (!is_sra_scalar_type (TREE_TYPE (f)) || !host_integerp (DECL_FIELD_OFFSET (f), 1) || !host_integerp (DECL_FIELD_BIT_OFFSET (f), 1) |