From: Arnaud Charlet Date: Thu, 9 Jan 2020 16:04:35 +0000 (-0500) Subject: [Ada] Initial infrastructure for adding a tree checker X-Git-Tag: basepoints/gcc-12~7398 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e60b6e23741c6d6059e6f765f18ce4c56366874b;p=thirdparty%2Fgcc.git [Ada] Initial infrastructure for adding a tree checker 2020-06-03 Arnaud Charlet gcc/ada/ * frontend.adb (Frontend): Call (dummy for now) tree checker. * debug.adb: Reserve -gnatd_V for the tree checker. * vast.ads, vast.adb: New files. * gcc-interface/Make-lang.in: Add vast.o. --- diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb index a1a7462084a2..764228e78fc7 100644 --- a/gcc/ada/debug.adb +++ b/gcc/ada/debug.adb @@ -193,7 +193,7 @@ package body Debug is -- d_S -- d_T Output trace information on invocation path recording -- d_U - -- d_V + -- d_V Enable verifications on the expanded tree -- d_W -- d_X -- d_Y @@ -1012,9 +1012,12 @@ package body Debug is -- it is checked, and the progress of the recursive trace through -- elaboration calls at compile time. - -- d_T The compiler outputs trance information to standard output whenever + -- d_T The compiler outputs trace information to standard output whenever -- an invocation path is recorded. + -- d_V Enable verification of the expanded code before calling the backend + -- and generate error messages on each inconsistency found. + -- d1 Error messages have node numbers where possible. Normally error -- messages have only source locations. This option is useful when -- debugging errors caused by expanded code, where the source location diff --git a/gcc/ada/frontend.adb b/gcc/ada/frontend.adb index 712340a3a929..0fd3424b38b5 100644 --- a/gcc/ada/frontend.adb +++ b/gcc/ada/frontend.adb @@ -66,6 +66,7 @@ with Sinput.L; use Sinput.L; with SCIL_LL; with Tbuild; use Tbuild; with Types; use Types; +with VAST; procedure Frontend is begin @@ -505,6 +506,12 @@ begin null; end if; + -- Verify the validity of the tree + + if Debug_Flag_Underscore_VV then + VAST.Check_Tree (Cunit (Main_Unit)); + end if; + -- Dump the source now. Note that we do this as soon as the analysis -- of the tree is complete, because it is not just a dump in the case -- of -gnatD, where it rewrites all source locations in the tree. diff --git a/gcc/ada/gcc-interface/Make-lang.in b/gcc/ada/gcc-interface/Make-lang.in index 2e0f6b42e642..12a0c58d9764 100644 --- a/gcc/ada/gcc-interface/Make-lang.in +++ b/gcc/ada/gcc-interface/Make-lang.in @@ -481,6 +481,7 @@ GNAT_ADA_OBJS = \ ada/urealp.o \ ada/usage.o \ ada/validsw.o \ + ada/vast.o \ ada/warnsw.o \ ada/widechar.o diff --git a/gcc/ada/vast.adb b/gcc/ada/vast.adb new file mode 100644 index 000000000000..87de26ed8519 --- /dev/null +++ b/gcc/ada/vast.adb @@ -0,0 +1,46 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- V A S T -- +-- -- +-- B o d y -- +-- -- +-- Copyright (C) 2020, 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. -- +-- -- +------------------------------------------------------------------------------ + +-- Dummy implementation + +package body VAST is + + ---------------- + -- Check_Tree -- + ---------------- + + procedure Check_Tree (GNAT_Root : Node_Id) is + pragma Unreferenced (GNAT_Root); + begin + null; + end Check_Tree; + +end VAST; diff --git a/gcc/ada/vast.ads b/gcc/ada/vast.ads new file mode 100644 index 000000000000..01dfbfde635f --- /dev/null +++ b/gcc/ada/vast.ads @@ -0,0 +1,42 @@ +------------------------------------------------------------------------------ +-- -- +-- GNAT COMPILER COMPONENTS -- +-- -- +-- V A S T -- +-- -- +-- S p e c -- +-- -- +-- Copyright (C) 2020, 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. -- +-- -- +------------------------------------------------------------------------------ + +-- This package is the entry point for VAST: Verifier for the Ada Semantic +-- Tree. + +with Types; use Types; + +package VAST is + + procedure Check_Tree (GNAT_Root : Node_Id); + -- Check the validity of the given Root tree + +end VAST;