diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2025-07-14 12:11:44 +0200 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2025-07-14 12:16:09 +0200 |
commit | b513e4f3e0914ade0a31a51625e1e2fe42093622 (patch) | |
tree | 52274376140085f266a49653c1d08027a7c51cc2 | |
parent | 3a1067c8b8c42f78a3dd881c8dc49a605aca044b (diff) | |
download | gcc-b513e4f3e0914ade0a31a51625e1e2fe42093622.zip gcc-b513e4f3e0914ade0a31a51625e1e2fe42093622.tar.gz gcc-b513e4f3e0914ade0a31a51625e1e2fe42093622.tar.bz2 |
Ada: Add missing guard before accessing the Underlying_Record_View field
It is necessary when GNAT extensions are enabled (-gnatX switch).
gcc/ada/
PR ada/121056
* sem_ch4.adb (Try_Object_Operation.Try_Primitive_Operation): Add
test on Is_Record_Type before accessing Underlying_Record_View.
gcc/testsuite/
* gnat.dg/deref4.adb: New test.
* gnat.dg/deref4_pkg.ads: New helper.
-rw-r--r-- | gcc/ada/sem_ch4.adb | 1 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/deref4.adb | 9 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/deref4_pkg.ads | 8 |
3 files changed, 18 insertions, 0 deletions
diff --git a/gcc/ada/sem_ch4.adb b/gcc/ada/sem_ch4.adb index dc81467..56dc7c6 100644 --- a/gcc/ada/sem_ch4.adb +++ b/gcc/ada/sem_ch4.adb @@ -10692,6 +10692,7 @@ package body Sem_Ch4 is or else (Has_Unknown_Discriminants (Typ) + and then Is_Record_Type (Base_Type (Obj_Type)) and then Typ = Underlying_Record_View (Base_Type (Obj_Type))) -- Prefix can be dereferenced diff --git a/gcc/testsuite/gnat.dg/deref4.adb b/gcc/testsuite/gnat.dg/deref4.adb new file mode 100644 index 0000000..586a6186 --- /dev/null +++ b/gcc/testsuite/gnat.dg/deref4.adb @@ -0,0 +1,9 @@ +-- { dg-do compile } +-- { dg-options "-gnatX" } + +with Deref4_Pkg; use Deref4_Pkg; + +procedure Deref4 is +begin + Obj.Proc (null); +end; diff --git a/gcc/testsuite/gnat.dg/deref4_pkg.ads b/gcc/testsuite/gnat.dg/deref4_pkg.ads new file mode 100644 index 0000000..9410d0d --- /dev/null +++ b/gcc/testsuite/gnat.dg/deref4_pkg.ads @@ -0,0 +1,8 @@ +package Deref4_Pkg is + + type A is tagged null record; + type A_Ptr is access A; + procedure Proc (This : in out A'Class; Some_Parameter : A_Ptr) is null; + Obj : A_Ptr; + +end Deref4_Pkg; |