diff --git a/gcc/ada/gnat1drv.adb b/gcc/ada/gnat1drv.adb --- a/gcc/ada/gnat1drv.adb +++ b/gcc/ada/gnat1drv.adb @@ -1504,11 +1504,19 @@ begin Namet.Finalize; Check_Rep_Info; - -- Exit the driver with an appropriate status indicator. This will - -- generate an empty object file for ignored Ghost units, otherwise - -- no object file will be generated. + if Ecode /= E_Success then + -- If we cannot generate code, exit the driver with an appropriate + -- status indicator. - Exit_Program (Ecode); + Exit_Program (Ecode); + + else + -- Otherwise use a goto so that finalization occurs normally and + -- for instance any late processing in the GCC code can be + -- performed. + + goto End_Of_Program; + end if; end if; -- In -gnatc mode we only do annotation if -gnatR is also set, or if