aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@adacore.com>2020-01-09 11:04:35 -0500
committerPierre-Marie de Rodat <derodat@adacore.com>2020-06-03 06:01:39 -0400
commite60b6e23741c6d6059e6f765f18ce4c56366874b (patch)
treea9d06feb928b7ea4a945b531cf10cf202d81a6a8
parentda566eeb31056d9f40ab48688dc3fe680535ce80 (diff)
downloadgcc-e60b6e23741c6d6059e6f765f18ce4c56366874b.zip
gcc-e60b6e23741c6d6059e6f765f18ce4c56366874b.tar.gz
gcc-e60b6e23741c6d6059e6f765f18ce4c56366874b.tar.bz2
[Ada] Initial infrastructure for adding a tree checker
2020-06-03 Arnaud Charlet <charlet@adacore.com> 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.
-rw-r--r--gcc/ada/debug.adb7
-rw-r--r--gcc/ada/frontend.adb7
-rw-r--r--gcc/ada/gcc-interface/Make-lang.in1
-rw-r--r--gcc/ada/vast.adb46
-rw-r--r--gcc/ada/vast.ads42
5 files changed, 101 insertions, 2 deletions
diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb
index a1a7462..764228e 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 712340a..0fd3424 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 2e0f6b4..12a0c58 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 0000000..87de26e
--- /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 --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- 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 0000000..01dfbfd
--- /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 --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- 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;