From d400d17ef00e6a24d69d6a36eff129f2c02ea806 Mon Sep 17 00:00:00 2001 From: Eric Botcazou <ebotcazou@adacore.com> Date: Thu, 10 May 2012 14:57:48 +0000 Subject: [PATCH] gimplify.c (gimplify_decl_expr): For a TYPE_DECL, also gimplify the DECL_ORIGINAL_TYPE if it is present. * gimplify.c (gimplify_decl_expr): For a TYPE_DECL, also gimplify the DECL_ORIGINAL_TYPE if it is present. From-SVN: r187369 --- gcc/ChangeLog | 5 +++++ gcc/gimplify.c | 7 +++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gnat.dg/lto11.adb | 20 ++++++++++++++++++++ gcc/testsuite/gnat.dg/lto11.ads | 9 +++++++++ 5 files changed, 45 insertions(+) create mode 100644 gcc/testsuite/gnat.dg/lto11.adb create mode 100644 gcc/testsuite/gnat.dg/lto11.ads diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd51a3c8945e..d9eca8eefa10 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2012-05-10 Eric Botcazou <ebotcazou@adacore.com> + + * gimplify.c (gimplify_decl_expr): For a TYPE_DECL, also gimplify the + DECL_ORIGINAL_TYPE if it is present. + 2012-05-10 Nick Clifton <nickc@redhat.com> PR target/53120 diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 811fa221fec3..ca38a0e26759 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -1441,6 +1441,13 @@ gimplify_decl_expr (tree *stmt_p, gimple_seq *seq_p) && !TYPE_SIZES_GIMPLIFIED (TREE_TYPE (decl))) gimplify_type_sizes (TREE_TYPE (decl), seq_p); + /* ??? DECL_ORIGINAL_TYPE is streamed for LTO so it needs to be gimplified + in case its size expressions contain problematic nodes like CALL_EXPR. */ + if (TREE_CODE (decl) == TYPE_DECL + && DECL_ORIGINAL_TYPE (decl) + && !TYPE_SIZES_GIMPLIFIED (DECL_ORIGINAL_TYPE (decl))) + gimplify_type_sizes (DECL_ORIGINAL_TYPE (decl), seq_p); + if (TREE_CODE (decl) == VAR_DECL && !DECL_EXTERNAL (decl)) { tree init = DECL_INITIAL (decl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7cdad4a6aaa0..7162e4e0ec87 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-05-10 Eric Botcazou <ebotcazou@adacore.com> + + * gnat.dg/lto11.ad[sb]: New test. + 2012-05-09 Uros Bizjak <ubizjak@gmail.com> PR target/52908 diff --git a/gcc/testsuite/gnat.dg/lto11.adb b/gcc/testsuite/gnat.dg/lto11.adb new file mode 100644 index 000000000000..ad0b8db30a30 --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto11.adb @@ -0,0 +1,20 @@ +-- { dg-do compile } +-- { dg-options "-flto" { target lto } } + +with Ada.Streams; use Ada.Streams; + +package body Lto11 is + + procedure Write + (S : not null access Root_Stream_Type'Class; + V : Vector) + is + subtype M_SEA is Stream_Element_Array (1 .. V'Size / Stream_Element'Size); + Bytes : M_SEA; + for Bytes'Address use V'Address; + pragma Import (Ada, Bytes); + begin + Ada.Streams.Write (S.all, Bytes); + end; + +end Lto11; diff --git a/gcc/testsuite/gnat.dg/lto11.ads b/gcc/testsuite/gnat.dg/lto11.ads new file mode 100644 index 000000000000..386d5ac4620a --- /dev/null +++ b/gcc/testsuite/gnat.dg/lto11.ads @@ -0,0 +1,9 @@ +with Ada.Streams; use Ada.Streams; + +package Lto11 is + + type Vector is array (Positive range <>) of Float; + + procedure Write (S : not null access Root_Stream_Type'Class; V : Vector); + +end Lto11; -- GitLab