diff options
Diffstat (limited to 'gcc/ada/comperr.adb')
-rw-r--r-- | gcc/ada/comperr.adb | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/gcc/ada/comperr.adb b/gcc/ada/comperr.adb index da6c8a688ed..d21b3ecb34f 100644 --- a/gcc/ada/comperr.adb +++ b/gcc/ada/comperr.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 1992-2009, Free Software Foundation, Inc. -- +-- Copyright (C) 1992-2011, 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- -- @@ -23,18 +23,20 @@ -- -- ------------------------------------------------------------------------------ --- This package contains routines called when a fatal internal compiler --- error is detected. Calls to these routines cause termination of the --- current compilation with appropriate error output. +-- This package contains routines called when a fatal internal compiler error +-- is detected. Calls to these routines cause termination of the current +-- compilation with appropriate error output. with Atree; use Atree; with Debug; use Debug; with Errout; use Errout; with Gnatvsn; use Gnatvsn; +with Lib; use Lib; with Namet; use Namet; with Opt; use Opt; with Osint; use Osint; with Output; use Output; +with Sinfo; use Sinfo; with Sinput; use Sinput; with Sprint; use Sprint; with Sdefault; use Sdefault; @@ -44,6 +46,7 @@ with Types; use Types; with Ada.Exceptions; use Ada.Exceptions; +with System.OS_Lib; use System.OS_Lib; with System.Soft_Links; use System.Soft_Links; package body Comperr is @@ -144,6 +147,12 @@ package body Comperr is end if; end if; + -- If we are in CodePeer mode, we must also delete SCIL files + + if CodePeer_Mode then + Delete_SCIL_Files; + end if; + -- If any errors have already occurred, then we guess that the abort -- may well be caused by previous errors, and we don't make too much -- fuss about it, since we want to let programmer fix the errors first. @@ -422,9 +431,42 @@ package body Comperr is Source_Dump; raise Unrecoverable_Error; end if; - end Compiler_Abort; + ----------------------- + -- Delete_SCIL_Files -- + ----------------------- + + procedure Delete_SCIL_Files is + Main : Node_Id; + Success : Boolean; + pragma Unreferenced (Success); + + begin + -- If parsing was not successful, no Main_Unit is available, so return + -- immediately. + + if Main_Source_File = No_Source_File then + return; + end if; + + -- Retrieve unit name, and remove old versions of SCIL/<unit>.scil and + -- SCIL/<unit>__body.scil + + Main := Unit (Cunit (Main_Unit)); + + if Nkind (Main) = N_Subprogram_Body then + Get_Name_String (Chars (Defining_Unit_Name (Specification (Main)))); + else + Get_Name_String (Chars (Defining_Unit_Name (Main))); + end if; + + Delete_File + ("SCIL/" & Name_Buffer (1 .. Name_Len) & ".scil", Success); + Delete_File + ("SCIL/" & Name_Buffer (1 .. Name_Len) & "__body.scil", Success); + end Delete_SCIL_Files; + ----------------- -- Repeat_Char -- ----------------- |