https://gcc.gnu.org/g:591ddf34a1e759560d89627eefae1d0e13b61ee8

commit r15-609-g591ddf34a1e759560d89627eefae1d0e13b61ee8
Author: Steve Baird <ba...@adacore.com>
Date:   Fri Mar 8 16:17:41 2024 -0800

    ada: Disable Equivalent_Array_Aggregate optimization if predicates involved
    
    In most paths, the function Build_Equivalent_Record_Aggregate was already
    testing Has_Predicates for a given component type and conditionally 
returning
    an Empty result. This is also needed in the case of a scalar component type.
    Without it, we can build corrupt trees that fail use-before-definition
    detection checks in gigi.
    
    gcc/ada/
    
            * exp_ch3.adb (Build_Equivalent_Record_Aggregate): Add
            Has_Predicates test for a scalar component to match what is
            already done for other kinds of components.

Diff:
---
 gcc/ada/exp_ch3.adb | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
index 5764b22b8002..f6314dff285f 100644
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -1950,6 +1950,7 @@ package body Exp_Ch3 is
               or else not Compile_Time_Known_Value (Type_Low_Bound (Comp_Type))
               or else not
                 Compile_Time_Known_Value (Type_High_Bound (Comp_Type))
+              or else Has_Predicates (Etype (Comp))
             then
                Initialization_Warning (T);
                return Empty;

Reply via email to