From: ebotcazou Date: Wed, 23 Jan 2019 11:07:56 +0000 (+0000) Subject: * cgraphunit.c (cgraph_node::expand_thunk): When expanding a GIMPLE X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c90ac5997bc52265629c6e70292b8188b71b727f;p=thirdparty%2Fgcc.git * cgraphunit.c (cgraph_node::expand_thunk): When expanding a GIMPLE thunk that returns by reference, use the type of the return object of the thunk instead of that of the alias to build the dereference. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@268182 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f1522bec6142..ef29cb0f30a7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-01-23 Eric Botcazou + + * cgraphunit.c (cgraph_node::expand_thunk): When expanding a GIMPLE + thunk that returns by reference, use the type of the return object + of the thunk instead of that of the alias to build the dereference. + 2019-01-23 Vineet Gupta * config/arc/atomic.md: Add operand to DMB instruction. diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 1cf9ac53a28a..a7c9b9ac249a 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -1916,10 +1916,9 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk) restmp = gimple_fold_indirect_ref (resdecl); if (!restmp) restmp = build2 (MEM_REF, - TREE_TYPE (TREE_TYPE (DECL_RESULT (alias))), + TREE_TYPE (TREE_TYPE (resdecl)), resdecl, - build_int_cst (TREE_TYPE - (DECL_RESULT (alias)), 0)); + build_int_cst (TREE_TYPE (resdecl), 0)); } else if (!is_gimple_reg_type (restype)) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 164c9bc395ee..b1ad37201af5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-01-23 Eric Botcazou + + * gnat.dg/specs/opt4.ads: New test. + 2019-01-23 Jakub Jelinek PR tree-optimization/88964 diff --git a/gcc/testsuite/gnat.dg/specs/opt4.ads b/gcc/testsuite/gnat.dg/specs/opt4.ads new file mode 100644 index 000000000000..b391950b372f --- /dev/null +++ b/gcc/testsuite/gnat.dg/specs/opt4.ads @@ -0,0 +1,25 @@ +-- { dg-do compile } +-- { dg-options "-O" } + +package Opt4 is + + type Rec (D : Boolean := False) is record + case D is + when False => null; + when True => I : Integer; + end case; + end record; + + Null_Rec : constant Rec := (D => False); + + type I1 is limited interface; + + type I2 is limited interface; + + function Func (Data : I2) return Rec is abstract; + + type Ext is limited new I1 and I2 with null record; + + overriding function Func (Data : Ext) return Rec is (Null_Rec); + +end Opt4;