From cd5a975094d0ef72cacd28e5334b6f83b6c1eadd Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 23 Jun 2010 08:39:36 +0200 Subject: [multiple changes] 2010-06-23 Robert Dewar * freeze.adb: Minor reformatting. 2010-06-23 Bob Duff * g-pehage.adb (Trim_Trailing_Nuls): Fix the code to match the comment. 2010-06-23 Vincent Celier * make.adb (Compile_Sources): Complete previous change. 2010-06-23 Ed Schonberg * sem_ch6.adb (Add_Extra_Formal): Use suffix "C" in the name of the Constrained extra formal. 2010-06-23 Ed Schonberg * exp_ch13.adb (Expand_Freeze_Actions): If validity checks and Initialize_Scalars are enabled, compile the generated equality function for a composite type with full checks enabled, so that validity checks are performed on individual components. From-SVN: r161250 --- gcc/ada/exp_ch13.adb | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'gcc/ada/exp_ch13.adb') diff --git a/gcc/ada/exp_ch13.adb b/gcc/ada/exp_ch13.adb index 3b682cf..6633ffb 100644 --- a/gcc/ada/exp_ch13.adb +++ b/gcc/ada/exp_ch13.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2010, Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -46,6 +46,7 @@ with Snames; use Snames; with Stand; use Stand; with Tbuild; use Tbuild; with Uintp; use Uintp; +with Validsw; use Validsw; package body Exp_Ch13 is @@ -346,6 +347,24 @@ package body Exp_Ch13 is Analyze (Decl, Suppress => All_Checks); Pop_Scope; + -- We treat generated equality specially, if validity checks are + -- enabled, in order to detect components default-initialized + -- with invalid values. + + elsif Nkind (Decl) = N_Subprogram_Body + and then Chars (Defining_Entity (Decl)) = Name_Op_Eq + and then Validity_Checks_On + and then Initialize_Scalars + then + declare + Save_Force : constant Boolean := Force_Validity_Checks; + + begin + Force_Validity_Checks := True; + Analyze (Decl); + Force_Validity_Checks := Save_Force; + end; + else Analyze (Decl, Suppress => All_Checks); end if; -- cgit v1.1