https://gcc.gnu.org/g:8ca6bbf84c168056c94b5f0374fb82916ee24772

commit r15-7316-g8ca6bbf84c168056c94b5f0374fb82916ee24772
Author: Eric Botcazou <ebotca...@adacore.com>
Date:   Sat Feb 1 10:56:44 2025 +0100

    Ada: Fix segfault on uninitialized variable as operand of primitive operator
    
    ...of derived real type.  It comes from an unexpected internal adjustment.
    
    gcc/ada/
            PR ada/118712
            * sem_warn.adb (Check_References): Deal with small adjustments of
            references.
    
    gcc/testsuite/
            * gnat.dg/warn33.adb: New test.
            * gnat.dg/warn33_pkg.ads: New helper.

Diff:
---
 gcc/ada/sem_warn.adb                 | 4 ++++
 gcc/testsuite/gnat.dg/warn33.adb     | 9 +++++++++
 gcc/testsuite/gnat.dg/warn33_pkg.ads | 7 +++++++
 3 files changed, 20 insertions(+)

diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb
index e460799da1f0..35ef61664723 100644
--- a/gcc/ada/sem_warn.adb
+++ b/gcc/ada/sem_warn.adb
@@ -1257,6 +1257,10 @@ package body Sem_Warn is
                   UR := Unset_Reference (E1);
                end if;
 
+               --  Protect again small adjustments of reference
+
+               UR := Unqual_Conv (UR);
+
                --  Special processing for access types
 
                if Present (UR) and then Is_Access_Type (E1T) then
diff --git a/gcc/testsuite/gnat.dg/warn33.adb b/gcc/testsuite/gnat.dg/warn33.adb
new file mode 100644
index 000000000000..779e2d12cfcf
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/warn33.adb
@@ -0,0 +1,9 @@
+--  { dg-do compile }
+
+with Warn33_Pkg; use Warn33_Pkg;
+
+procedure Warn33 is
+  Var : DerT;
+begin
+  Var := 1.0 - Var; -- { dg-warning "may be referenced before" }
+end;
diff --git a/gcc/testsuite/gnat.dg/warn33_pkg.ads 
b/gcc/testsuite/gnat.dg/warn33_pkg.ads
new file mode 100644
index 000000000000..326fda85f981
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/warn33_pkg.ads
@@ -0,0 +1,7 @@
+package Warn33_Pkg is
+
+  type GenT is delta 1.0 range 1.0 .. 10.0;
+  function "-" (X : GenT; Y : GenT) return GenT;
+  type DerT is new GenT;
+
+end Warn33_Pkg;

Reply via email to