Fix checking failure in IPA-SRA
This is a regression present on the mainline and 10 branch: on the one hand, IPA-SRA does *not* disqualify accesses with zero size but, on the other hand, it checks that accesses present in the tree have a (strictly) positive size, thus trivially yielding an ICE in some cases. gcc/ChangeLog: * ipa-sra.c (verify_access_tree_1): Relax assertion on the size. gcc/testsuite/ChangeLog: * gnat.dg/opt91.ads, gnat.dg/opt91.adb: New test. * gnat.dg/opt91_pkg.ads, gnat.dg/opt91_pkg.adb: New helper.
This commit is contained in:
parent
9199da4b59
commit
241a2c4980
@ -1480,7 +1480,7 @@ verify_access_tree_1 (gensum_param_access *access, HOST_WIDE_INT parent_offset,
|
||||
{
|
||||
while (access)
|
||||
{
|
||||
gcc_assert (access->offset >= 0 && access->size > 0);
|
||||
gcc_assert (access->offset >= 0 && access->size >= 0);
|
||||
|
||||
if (parent_size != 0)
|
||||
{
|
||||
|
||||
11
gcc/testsuite/gnat.dg/opt91.adb
Normal file
11
gcc/testsuite/gnat.dg/opt91.adb
Normal file
@ -0,0 +1,11 @@
|
||||
-- { dg-do compile }
|
||||
-- { dg-options "-O2 -fchecking=1" }
|
||||
|
||||
package body Opt91 is
|
||||
|
||||
function Custom_Image (Self : True_Relation_Rec) return String is
|
||||
begin
|
||||
return "<True>";
|
||||
end;
|
||||
|
||||
end Opt91;
|
||||
10
gcc/testsuite/gnat.dg/opt91.ads
Normal file
10
gcc/testsuite/gnat.dg/opt91.ads
Normal file
@ -0,0 +1,10 @@
|
||||
with Opt91_Pkg; use Opt91_Pkg;
|
||||
|
||||
package Opt91 is
|
||||
|
||||
type True_Relation_Rec is null record;
|
||||
function Custom_Image (Self : True_Relation_Rec) return String;
|
||||
|
||||
package True_Relation is new Pure_Relation (Ty => True_Relation_Rec);
|
||||
|
||||
end Opt91;
|
||||
12
gcc/testsuite/gnat.dg/opt91_pkg.adb
Normal file
12
gcc/testsuite/gnat.dg/opt91_pkg.adb
Normal file
@ -0,0 +1,12 @@
|
||||
package body Opt91_Pkg is
|
||||
|
||||
package body Pure_Relation is
|
||||
|
||||
overriding function Custom_Image (Self : Rel) return String is
|
||||
begin
|
||||
return Custom_Image (Self.Rel);
|
||||
end Custom_Image;
|
||||
|
||||
end Pure_Relation;
|
||||
|
||||
end Opt91_Pkg;
|
||||
19
gcc/testsuite/gnat.dg/opt91_pkg.ads
Normal file
19
gcc/testsuite/gnat.dg/opt91_pkg.ads
Normal file
@ -0,0 +1,19 @@
|
||||
package Opt91_Pkg is
|
||||
|
||||
type Base_Relation is abstract tagged null record;
|
||||
|
||||
function Custom_Image (Self : Base_Relation) return String is abstract;
|
||||
|
||||
generic
|
||||
type Ty is private;
|
||||
with function Custom_Image (Self : Ty) return String is <>;
|
||||
package Pure_Relation is
|
||||
|
||||
type Rel is new Base_Relation with record
|
||||
Rel : Ty;
|
||||
end record;
|
||||
|
||||
overriding function Custom_Image (Self : Rel) return String;
|
||||
end Pure_Relation;
|
||||
|
||||
end Opt91_Pkg;
|
||||
Loading…
Reference in New Issue
Block a user