]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[Ada] Remove unnecessary dead code after calls to nonreturning procedures
authorPiotr Trojanek <trojanek@adacore.com>
Thu, 2 Jun 2022 15:32:15 +0000 (17:32 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Tue, 5 Jul 2022 08:28:18 +0000 (08:28 +0000)
A new warning about unreachable code that follows calls to procedures
with No_Return would flag some dead defensive code. Comments next to
this code suggest that it was added to please some ancient version of
the compiler, but recent releases of GNAT do not require such a code.

gcc/ada/

* gnatls.adb (Corresponding_Sdep_Entry): Remove dead return
statement in defensive path; there is another return statement
for a normal execution of this routine, so rule Ada RM 6.5(5),
which requires function to have at least one return statement is
still satisfied.
(Gnatls): Remove dead, call to nonreturning Exit_Program after
Output_License_Information which itself does not return.
* libgnat/a-exstat.adb (Bad_EO): Remove raise statement that was
meant to please some ancient version of GNAT.
* libgnat/g-awk.adb (Raise_With_Info): Likewise.
* sem_attr.adb (Check_Reference): Remove dead return statement;
rule Ada RM 6.5(5), which requires function to have at least one
return statement is still satisfied.
(Analyze_Attribute): Remove dead exit statement.
(Check_Reference): Same as above.
* sem_ch12.adb (Instantiate_Formal_Package): Remove dead raise
statement; it was inconsistent with other calls to
Abandon_Instantiation, which are not followed by a raise
statement.
* sem_prag.adb (Process_Convention): Remove dead defensive
assignment.
(Interrupt_State): Remove dead defensive exit statement.
(Do_SPARK_Mode): Likewise.
* sfn_scan.adb (Scan_String): Remove dead defensive assignment.

gcc/ada/gnatls.adb
gcc/ada/libgnat/a-exstat.adb
gcc/ada/libgnat/g-awk.adb
gcc/ada/sem_attr.adb
gcc/ada/sem_ch12.adb
gcc/ada/sem_prag.adb
gcc/ada/sfn_scan.adb

index 9b62f71d68e0fe798ae55c5d6bcfaba71899dfc8..72445268f00521026d25f510bb66ad5a023c38a0 100644 (file)
@@ -319,7 +319,6 @@ procedure Gnatls is
       Write_Eol;
       Error_Msg ("wrong ALI format, can't find dependency line for $ in {");
       Exit_Program (E_Fatal);
-      return No_Sdep_Id;
    end Corresponding_Sdep_Entry;
 
    -------------------------
@@ -2051,7 +2050,6 @@ begin
    if License then
       if Arg_Count = 2 then
          Output_License_Information;
-         Exit_Program (E_Success);
 
       else
          Set_Standard_Error;
index a3f808eada8306c48ac11ddc025ca408e67180e9..acc251649cd97f5115e0fbdf854e3e23154a460d 100644 (file)
@@ -109,13 +109,6 @@ package body Stream_Attributes is
          Raise_Exception
            (Program_Error'Identity,
             "bad exception occurrence in stream input");
-
-         --  The following junk raise of Program_Error is required because
-         --  this is a No_Return procedure, and unfortunately Raise_Exception
-         --  can return (this particular call can't, but the back end is not
-         --  clever enough to know that).
-
-         raise Program_Error;
       end Bad_EO;
 
       procedure Next_String is
index 1c887853fa9c9732068e04a4952832ce30372797..9b2e127b3bb632b477ca6d5f394ced2343ff1418 100644 (file)
@@ -1211,7 +1211,6 @@ package body GNAT.AWK is
       Exceptions.Raise_Exception
         (E,
          '[' & Filename & ':' & Line & "] " & Message);
-      raise Constraint_Error; -- to please GNAT as this is a No_Return proc
    end Raise_With_Info;
 
    ---------------
index be600872a1d68a010c1b85692476b110974c05a3..6a35358261e5199461027dbf7306477a2fee9064 100644 (file)
@@ -4747,7 +4747,6 @@ package body Sem_Attr is
                   Error_Attr
                     ("prefix of attribute % cannot reference local entities",
                      Nod);
-                  return Abandon;
                else
                   return OK;
                end if;
@@ -4989,7 +4988,6 @@ package body Sem_Attr is
             else
                Error_Attr
                  ("attribute % cannot appear in body or accept statement", N);
-               exit;
             end if;
          end loop;
 
@@ -5383,7 +5381,6 @@ package body Sem_Attr is
                   Error_Attr
                     ("prefix of attribute % cannot reference local entities",
                      Nod);
-                  return Abandon;
 
                --  Otherwise keep inspecting the prefix
 
index c5f2eed96fdbd7106e3c98a5dd022fcc848feb9f..dcc0dac43421980821a6788d3d840b305a5c9b4f 100644 (file)
@@ -10572,7 +10572,6 @@ package body Sem_Ch12 is
          Error_Msg_N
            ("expect package instance to instantiate formal", Actual);
          Abandon_Instantiation (Actual);
-         raise Program_Error;
 
       else
          Actual_Pack := Entity (Actual);
index 89c45da10bbdd6f98a89e9380eae9f0d768620d3..3660c75fc6918946abbe0c084a565b75847b1d79 100644 (file)
@@ -8336,7 +8336,6 @@ package body Sem_Prag is
                Error_Pragma_Arg
                  ("argument of pragma% must be subprogram or access type",
                   Arg2);
-               Subp := Empty;
             end if;
 
             --  ISO C requires a named parameter before the ellipsis, so a
@@ -18641,7 +18640,6 @@ package body Sem_Prag is
                     Interrupt_States.Table (IST_Num).Pragma_Loc;
                   Error_Pragma_Arg
                     ("state conflicts with that given #", Arg2);
-                  exit;
                end if;
 
                IST_Num := IST_Num + 1;
@@ -23762,7 +23760,6 @@ package body Sem_Prag is
 
                   else
                      Pragma_Misplaced;
-                     exit;
                   end if;
 
                   Prev (Stmt);
index b6ab92fe46bf527c3dd19ed0742ff633858fef7c..b428ed7f0cf5a4777341e7349486402fc9eb8cb3 100644 (file)
@@ -622,7 +622,6 @@ package body SFN_Scan is
          Q := '%';
       else
          Error ("bad string");
-         Q := '"';
       end if;
 
       --  Scan out the string, B points to first char