Message ID | 20120426095947.GA6734@adacore.com |
---|---|
State | New |
Headers | show |
Index: sem_ch5.adb =================================================================== --- sem_ch5.adb (revision 186860) +++ sem_ch5.adb (working copy) @@ -2767,6 +2767,12 @@ begin Nxt := Original_Node (Next (N)); + -- Skip past pragmas + + while Nkind (Nxt) = N_Pragma loop + Nxt := Original_Node (Next (Nxt)); + end loop; + -- If a label follows us, then we never have dead code, since -- someone could branch to the label, so we just ignore it, unless -- we are in formal mode where goto statements are not allowed.
This patch causes pragmas to be ignored when checking for unreachable code, which catches additional cases not caught before, as shown by the following example, compiled with -gnatwe.w -gnatld7 1. with Ada.Text_IO; use Ada.Text_IO; 2. procedure Main4 is 3. begin 4. loop 5. Put_Line ("Main"); 6. end loop; 7. 8. pragma List (On); 9. Put_Line ("end"); | >>> warning: unreachable code 10. end Main4; This also fixes an anomoly that trying to suppress the warning with pragma Warnings (Off, text) did not work, since the pragma itself killed the warning. Tested on x86_64-pc-linux-gnu, committed on trunk 2012-04-26 Robert Dewar <dewar@adacore.com> * sem_ch5.adb (Check_Unreachable_Code): Skip past pragmas.