tree-sra.c (build_reconstructed_reference): Return NULL_TREE instead of NULL.
* tree-sra.c (build_reconstructed_reference): Return NULL_TREE instead of NULL. Add guard for broken VIEW_CONVERT_EXPRs. From-SVN: r274576
This commit is contained in:
parent
dc139eb184
commit
d83a4cf15d
5 changed files with 49 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2019-08-16 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* tree-sra.c (build_reconstructed_reference): Return NULL_TREE instead
|
||||
of NULL. Add guard for broken VIEW_CONVERT_EXPRs.
|
||||
|
||||
2019-08-16 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
* tree.def (TYPE_SIZE): Clarify.
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2019-08-16 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/opt81.ad[sb]: New test.
|
||||
|
||||
2019-08-16 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR testsuite/91458
|
||||
|
|
20
gcc/testsuite/gnat.dg/opt81.adb
Normal file
20
gcc/testsuite/gnat.dg/opt81.adb
Normal file
|
@ -0,0 +1,20 @@
|
|||
-- { dg-do compile }
|
||||
-- { dg-options "-O -gnatws" }
|
||||
|
||||
with Unchecked_Conversion;
|
||||
|
||||
package body Opt81 is
|
||||
|
||||
procedure Copy (From, To : Rec) is
|
||||
Len : constant Natural := From.A.all'Length;
|
||||
subtype Fixed_String is String (1 .. Len);
|
||||
type Fixed_String_Access is access Fixed_String;
|
||||
function To_Fixed is new
|
||||
Unchecked_Conversion (Source => String_Access,
|
||||
Target => Fixed_String_Access);
|
||||
S : Fixed_String_Access := To_Fixed (To.A);
|
||||
begin
|
||||
S (1 .. Len) := From.A.all;
|
||||
end;
|
||||
|
||||
end Opt81;
|
15
gcc/testsuite/gnat.dg/opt81.ads
Normal file
15
gcc/testsuite/gnat.dg/opt81.ads
Normal file
|
@ -0,0 +1,15 @@
|
|||
package Opt81 is
|
||||
|
||||
type String_Access is access String;
|
||||
|
||||
type Rec is record
|
||||
A : String_Access;
|
||||
end record;
|
||||
|
||||
for Rec use record
|
||||
A at 0 range 0 .. (Standard'Word_Size - 1);
|
||||
end record;
|
||||
|
||||
procedure Copy(From, To : Rec);
|
||||
|
||||
end Opt81;
|
|
@ -1812,11 +1812,15 @@ build_reconstructed_reference (location_t, tree base, struct access *model)
|
|||
while (!types_compatible_p (TREE_TYPE (expr), TREE_TYPE (base)))
|
||||
{
|
||||
if (!handled_component_p (expr))
|
||||
return NULL;
|
||||
return NULL_TREE;
|
||||
prev_expr = expr;
|
||||
expr = TREE_OPERAND (expr, 0);
|
||||
}
|
||||
|
||||
/* Guard against broken VIEW_CONVERT_EXPRs... */
|
||||
if (!prev_expr)
|
||||
return NULL_TREE;
|
||||
|
||||
TREE_OPERAND (prev_expr, 0) = base;
|
||||
tree ref = unshare_expr (model->expr);
|
||||
TREE_OPERAND (prev_expr, 0) = expr;
|
||||
|
|
Loading…
Add table
Reference in a new issue