From 75411d65de646e17ddb942b9f7f728cf6a93cf20 Mon Sep 17 00:00:00 2001 From: pmderodat Date: Mon, 3 Dec 2018 15:49:12 +0000 Subject: [PATCH] [Ada] Fix problematic overloading of operator in Ada 95 mode The change reverts the test deciding whether an initialization procedure can be inherited from parent to derived type to the original implementation, which allowed inheriting a null procedure. This prevents the creation of another null initialization procedure for the derived type, which in turn can avoid an artificial overloading which can wreak havoc in the analysis of private declarations of a package. 2018-12-03 Eric Botcazou gcc/ada/ * exp_ch3.adb (Build_Record_Init_Proc): Inherit an initialization procedure if it is present, even if it is null. gcc/testsuite/ * gnat.dg/overload2.adb, gnat.dg/overload2_p.adb, gnat.dg/overload2_p.ads, gnat.dg/overload2_q.adb, gnat.dg/overload2_q.ads: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266753 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/exp_ch3.adb | 2 +- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gnat.dg/overload2.adb | 13 +++++++++++++ gcc/testsuite/gnat.dg/overload2_p.adb | 6 ++++++ gcc/testsuite/gnat.dg/overload2_p.ads | 6 ++++++ gcc/testsuite/gnat.dg/overload2_q.adb | 5 +++++ gcc/testsuite/gnat.dg/overload2_q.ads | 4 ++++ 8 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gnat.dg/overload2.adb create mode 100644 gcc/testsuite/gnat.dg/overload2_p.adb create mode 100644 gcc/testsuite/gnat.dg/overload2_p.ads create mode 100644 gcc/testsuite/gnat.dg/overload2_q.adb create mode 100644 gcc/testsuite/gnat.dg/overload2_q.ads diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index dae657493a09..481f9da53e6b 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2018-12-03 Eric Botcazou + + * exp_ch3.adb (Build_Record_Init_Proc): Inherit an + initialization procedure if it is present, even if it is null. + 2018-12-03 Patrick Bernardi * libgnarl/s-taskin.ads (ATC_Level_Base): Redefine to span from diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 65f6805bb7c9..35b8fe3c8166 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -3712,7 +3712,7 @@ package body Exp_Ch3 is and then not Is_Unchecked_Union (Rec_Type) and then not Has_New_Non_Standard_Rep (Rec_Type) and then not Parent_Subtype_Renaming_Discrims - and then Has_Non_Null_Base_Init_Proc (Etype (Rec_Type)) + and then Present (Base_Init_Proc (Etype (Rec_Type))) then Copy_TSS (Base_Init_Proc (Etype (Rec_Type)), Rec_Type); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fdb6f8b75cab..b69ad6613168 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-12-03 Eric Botcazou + + * gnat.dg/overload2.adb, gnat.dg/overload2_p.adb, + gnat.dg/overload2_p.ads, gnat.dg/overload2_q.adb, + gnat.dg/overload2_q.ads: New testcase. + 2018-12-03 Fritz Reese Mark Eggleston diff --git a/gcc/testsuite/gnat.dg/overload2.adb b/gcc/testsuite/gnat.dg/overload2.adb new file mode 100644 index 000000000000..56c8587b57dc --- /dev/null +++ b/gcc/testsuite/gnat.dg/overload2.adb @@ -0,0 +1,13 @@ +-- { dg-do compile } +-- { dg-options "-gnat95" } + +with Overload2_P; use Overload2_P; +with text_io; use text_io; +procedure overload2 is + this, that: t; + yes : boolean := this /= that; +begin + if not yes then + put_line ("FAILED"); + end if; +end; diff --git a/gcc/testsuite/gnat.dg/overload2_p.adb b/gcc/testsuite/gnat.dg/overload2_p.adb new file mode 100644 index 000000000000..49343cd90e00 --- /dev/null +++ b/gcc/testsuite/gnat.dg/overload2_p.adb @@ -0,0 +1,6 @@ +-- { dg-options "-gnat95 -gnatws" } + +package body overload2_p is + function "=" (this, that: t) return boolean is begin return True; end; + this, that : t; +end; diff --git a/gcc/testsuite/gnat.dg/overload2_p.ads b/gcc/testsuite/gnat.dg/overload2_p.ads new file mode 100644 index 000000000000..8d4da7485313 --- /dev/null +++ b/gcc/testsuite/gnat.dg/overload2_p.ads @@ -0,0 +1,6 @@ +with overload2_q; +package overload2_p is + type t is new overload2_q.t; +private + function "=" (this, that: t) return boolean; +end; diff --git a/gcc/testsuite/gnat.dg/overload2_q.adb b/gcc/testsuite/gnat.dg/overload2_q.adb new file mode 100644 index 000000000000..55a756eb3873 --- /dev/null +++ b/gcc/testsuite/gnat.dg/overload2_q.adb @@ -0,0 +1,5 @@ +-- { dg-options "-gnat95" } + +package body overload2_q is + function "=" (this, that: t) return boolean is begin return False; end; +end; diff --git a/gcc/testsuite/gnat.dg/overload2_q.ads b/gcc/testsuite/gnat.dg/overload2_q.ads new file mode 100644 index 000000000000..c4e89aa0ce0c --- /dev/null +++ b/gcc/testsuite/gnat.dg/overload2_q.ads @@ -0,0 +1,4 @@ +package overload2_q is + type t is null record; + function "=" (this, that: t) return boolean; +end; -- 2.47.2