From 7367cd5949ec066811979dbb60b51cbcc6c123b3 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Wed, 6 Jan 2021 04:41:54 -0500 Subject: [PATCH] [Ada] Assert_Failure vs Assertion_Error gcc/ada/ * libgnat/s-assert.ads (Assert_Failure): Now a renaming of Assertion_Error. * libgnat/a-assert.ads (Assertion_Error): Now a first class citizen. Remove dependency on System.Assertions. * gcc-interface/a-assert.ads, gcc-interface/a-assert.adb: New. * gcc-interface/Make-lang.in (GNAT_ADA_OBJS, GNATBIND_OBJS): Add a-assert.o from gcc-interface. --- gcc/ada/gcc-interface/Make-lang.in | 2 ++ gcc/ada/gcc-interface/a-assert.adb | 52 ++++++++++++++++++++++++++++++++++++++ gcc/ada/gcc-interface/a-assert.ads | 50 ++++++++++++++++++++++++++++++++++++ gcc/ada/libgnat/a-assert.ads | 17 +++---------- gcc/ada/libgnat/s-assert.ads | 4 ++- 5 files changed, 110 insertions(+), 15 deletions(-) create mode 100644 gcc/ada/gcc-interface/a-assert.adb create mode 100644 gcc/ada/gcc-interface/a-assert.ads diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in index d88c354..f5c8e6f 100644 --- a/gcc/ada/gcc-interface/Make-lang.in +++ b/gcc/ada/gcc-interface/Make-lang.in @@ -471,6 +471,7 @@ GNAT_ADA_OBJS = \ ada/stylesw.o \ ada/switch-c.o \ ada/switch.o \ + ada/gcc-interface/a-assert.o \ ada/gcc-interface/system.o \ ada/table.o \ ada/targparm.o \ @@ -629,6 +630,7 @@ GNATBIND_OBJS = \ ada/stylesw.o \ ada/switch-b.o \ ada/switch.o \ + ada/gcc-interface/a-assert.o \ ada/gcc-interface/system.o \ ada/table.o \ ada/targext.o \ diff --git a/gcc/ada/gcc-interface/a-assert.adb b/gcc/ada/gcc-interface/a-assert.adb new file mode 100644 index 0000000..429b14b --- /dev/null +++ b/gcc/ada/gcc-interface/a-assert.adb @@ -0,0 +1,52 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- A D A . A S S E R T -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 2007-2021, 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- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- . -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +package body Ada.Assertions is + + ------------ + -- Assert -- + ------------ + + procedure Assert (Check : Boolean) is + begin + if Check = False then + raise Ada.Assertions.Assertion_Error; + end if; + end Assert; + + procedure Assert (Check : Boolean; Message : String) is + begin + if Check = False then + raise Ada.Assertions.Assertion_Error with Message; + end if; + end Assert; + +end Ada.Assertions; diff --git a/gcc/ada/gcc-interface/a-assert.ads b/gcc/ada/gcc-interface/a-assert.ads new file mode 100644 index 0000000..55ed806 --- /dev/null +++ b/gcc/ada/gcc-interface/a-assert.ads @@ -0,0 +1,50 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT RUN-TIME COMPONENTS -- +-- -- +-- A D A . A S S E R T I O N S -- +-- -- +-- Copyright (C) 2015-2021, Free Software Foundation, Inc. -- +-- -- +-- S p e c -- +-- -- +-- This specification is derived from the Ada Reference Manual for use with -- +-- GNAT. The copyright notice above, and the license provisions that follow -- +-- apply solely to the contracts that have been added. -- +-- -- +-- 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- -- +-- ware Foundation; either version 3, or (at your option) any later ver- -- +-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- +-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- +-- or FITNESS FOR A PARTICULAR PURPOSE. -- +-- -- +-- As a special exception under Section 7 of GPL version 3, you are granted -- +-- additional permissions described in the GCC Runtime Library Exception, -- +-- version 3.1, as published by the Free Software Foundation. -- +-- -- +-- You should have received a copy of the GNU General Public License and -- +-- a copy of the GCC Runtime Library Exception along with this program; -- +-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- +-- . -- +-- -- +-- GNAT was originally developed by the GNAT team at New York University. -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This version is used to bootstrap the compiler only. +-- It can be removed when we switch to using a GNAT from 2014 or later. + +pragma Compiler_Unit_Warning; + +package Ada.Assertions is + pragma Pure; + + Assertion_Error : exception; + + procedure Assert (Check : Boolean); + + procedure Assert (Check : Boolean; Message : String); + +end Ada.Assertions; diff --git a/gcc/ada/libgnat/a-assert.ads b/gcc/ada/libgnat/a-assert.ads index c31d6e8..0a590d6 100644 --- a/gcc/ada/libgnat/a-assert.ads +++ b/gcc/ada/libgnat/a-assert.ads @@ -39,23 +39,12 @@ pragma Assertion_Policy (Pre => Ignore); --- We do a with of System.Assertions to get hold of the exception (following --- the specific RM permission that lets' Assertion_Error being a renaming). --- The suppression of Warnings stops the warning about bad categorization. - -pragma Warnings (Off); -with System.Assertions; -pragma Warnings (On); +pragma Compiler_Unit_Warning; package Ada.Assertions with - SPARK_Mode + SPARK_Mode, Pure is - pragma Pure (Assertions); - - Assertion_Error : exception renames System.Assertions.Assert_Failure; - -- This is the renaming that is allowed by 11.4.2(24). Note that the - -- Exception_Name will refer to the one in System.Assertions (see - -- AARM-11.4.1(12.b)). + Assertion_Error : exception; procedure Assert (Check : Boolean) with Pre => Check; diff --git a/gcc/ada/libgnat/s-assert.ads b/gcc/ada/libgnat/s-assert.ads index 372b875..aa82549 100644 --- a/gcc/ada/libgnat/s-assert.ads +++ b/gcc/ada/libgnat/s-assert.ads @@ -38,9 +38,11 @@ pragma Compiler_Unit_Warning; +with Ada.Assertions; + package System.Assertions is - Assert_Failure : exception; + Assert_Failure : exception renames Ada.Assertions.Assertion_Error; -- Exception raised when assertion fails procedure Raise_Assert_Failure (Msg : String); -- 2.7.4