diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 2628acedb22..c78970e24d6 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,28 @@ +2008-08-05 Robert Dewar + + * opt.ads (Warn_On_Biased_Representation): New flag + + * sem_ch13.adb: + (Analyze_Attribute_Definition_Clause): Issue warning when biased + representation is required. + (Minimum_Size): Don't allow biasing if enum rep clause case + + * sem_warn.adb: + (Set_Dot_Warning_Switch): Add handling of -gnatw.b/B switches + (Set_Warning_Switch): Include -gnatw.b in -gnatwa, -gnatw.B in gnatws + + * usage.adb: Add lines for -gnatw.b/B switches + +2008-08-05 Pascal Obry + + * a-coinve.adb: Reorder the code to avoid uninitialized warning. + + * adaint.c: In UNIX cases do not call __gnat_stat but stat directly. + +2008-08-05 Thomas Quinot + + * socket.c: Minor reformatting. + 2008-08-05 Robert Dewar * sem_ch3.adb: Minor reformatting diff --git a/gcc/ada/opt.ads b/gcc/ada/opt.ads index 68bf246919a..b0bde56b50d 100644 --- a/gcc/ada/opt.ads +++ b/gcc/ada/opt.ads @@ -1240,6 +1240,12 @@ package Opt is -- Set to True to generate warnings for static fixed-point expression -- values that are not an exact multiple of the small value of the type. + Warn_On_Biased_Representation : Boolean := True; + -- GNAT + -- Set to True to generate warnings for size clauses, component clauses + -- and component_size clauses that force biased representation. Set False + -- by -gnatw.B. + Warn_On_Constant : Boolean := False; -- GNAT -- Set to True to generate warnings for variables that could be declared diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index f72ffff6397..fe5305fa40f 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -1131,6 +1131,12 @@ package body Sem_Ch13 is Set_Associated_Node_For_Itype (New_Ctyp, U_Ent); Set_Component_Type (Btype, New_Ctyp); + + if Warn_On_Biased_Representation then + Error_Msg_N + ("?component size clause forces biased " + & "representation", N); + end if; end if; Set_Component_Size (Btype, Csize); @@ -1330,7 +1336,12 @@ package body Sem_Ch13 is or else Has_Small_Clause (U_Ent) then Check_Size (Expr, Etyp, Size, Biased); - Set_Has_Biased_Representation (U_Ent, Biased); + Set_Has_Biased_Representation (U_Ent, Biased); + + if Biased and Warn_On_Biased_Representation then + Error_Msg_N + ("?size clause forces biased representation", N); + end if; end if; -- For types set RM_Size and Esize if possible @@ -1708,6 +1719,11 @@ package body Sem_Ch13 is if Is_Elementary_Type (U_Ent) then Check_Size (Expr, U_Ent, Size, Biased); Set_Has_Biased_Representation (U_Ent, Biased); + + if Biased and Warn_On_Biased_Representation then + Error_Msg_N + ("?value size clause forces biased representation", N); + end if; end if; Set_RM_Size (U_Ent, Size); @@ -2491,6 +2507,12 @@ package body Sem_Ch13 is Set_Has_Biased_Representation (Comp, Biased); + if Biased and Warn_On_Biased_Representation then + Error_Msg_F + ("?component clause forces biased " + & "representation", CC); + end if; + if Present (Ocomp) then Set_Component_Clause (Ocomp, CC); Set_Component_Bit_Offset (Ocomp, Fbit); @@ -3570,7 +3592,10 @@ package body Sem_Ch13 is -- Fall through with Hi and Lo set. Deal with biased case - if (Biased and then not Is_Fixed_Point_Type (T)) + if (Biased + and then not Is_Fixed_Point_Type (T) + and then not (Is_Enumeration_Type (T) + and then Has_Non_Standard_Rep (T))) or else Has_Biased_Representation (T) then Hi := Hi - Lo; diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index 5fe97432e05..c22d0ce475a 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -2817,6 +2817,12 @@ package body Sem_Warn is when 'A' => Warn_On_Assertion_Failure := False; + when 'b' => + Warn_On_Biased_Representation := True; + + when 'B' => + Warn_On_Biased_Representation := False; + when 'c' => Warn_On_Unrepped_Components := True; @@ -2837,12 +2843,12 @@ package body Sem_Warn is Warn_On_Assertion_Failure := True; Warn_On_Assumed_Low_Bound := True; Warn_On_Bad_Fixed_Value := True; + Warn_On_Biased_Representation := True; Warn_On_Constant := True; Warn_On_Deleted_Code := True; Warn_On_Dereference := True; Warn_On_Export_Import := True; Warn_On_Hiding := True; - Ineffective_Inline_Warnings := True; Warn_On_Modified_Unread := True; Warn_On_No_Value_Assigned := True; Warn_On_Non_Local_Exception := True; @@ -2910,6 +2916,7 @@ package body Sem_Warn is Warn_On_Assertion_Failure := True; Warn_On_Assumed_Low_Bound := True; Warn_On_Bad_Fixed_Value := True; + Warn_On_Biased_Representation := True; Warn_On_Constant := True; Warn_On_Export_Import := True; Warn_On_Modified_Unread := True; @@ -2936,6 +2943,7 @@ package body Sem_Warn is Warn_On_Assertion_Failure := False; Warn_On_Assumed_Low_Bound := False; Warn_On_Bad_Fixed_Value := False; + Warn_On_Biased_Representation := False; Warn_On_Constant := False; Warn_On_Deleted_Code := False; Warn_On_Dereference := False; diff --git a/gcc/ada/usage.adb b/gcc/ada/usage.adb index e4a9446ef2c..74780107da3 100644 --- a/gcc/ada/usage.adb +++ b/gcc/ada/usage.adb @@ -378,12 +378,14 @@ begin Write_Line (" a turn on all optional warnings " & "(except dhl.ot.w)"); Write_Line (" A turn off all optional warnings"); - Write_Line (" .a* turn on warnings for failing assertions"); - Write_Line (" .A turn off warnings for failing assertions"); + Write_Line (" .a* turn on warnings for failing assertion"); + Write_Line (" .A turn off warnings for failing assertion"); Write_Line (" b turn on warnings for bad fixed value " & "(not multiple of small)"); Write_Line (" B* turn off warnings for bad fixed value " & "(not multiple of small)"); + Write_Line (" .b* turn on warnings for biased representation"); + Write_Line (" .B turn off warnings for biased representation"); Write_Line (" c turn on warnings for constant conditional"); Write_Line (" C* turn off warnings for constant conditional"); Write_Line (" .c turn on warnings for unrepped components"); @@ -396,7 +398,7 @@ begin Write_Line (" F* turn off warnings for unreferenced formal"); Write_Line (" g* turn on warnings for unrecognized pragma"); Write_Line (" G turn off warnings for unrecognized pragma"); - Write_Line (" h turn on warnings for hiding variable "); + Write_Line (" h turn on warnings for hiding variable"); Write_Line (" H* turn off warnings for hiding variable"); Write_Line (" i* turn on warnings for implementation unit"); Write_Line (" I turn off warnings for implementation unit"); @@ -430,9 +432,9 @@ begin Write_Line (" .P* turn off warnings for suspicious parameter " & "order"); Write_Line (" q* turn on warnings for questionable " & - "missing parentheses"); + "missing parenthesis"); Write_Line (" Q turn off warnings for questionable " & - "missing parentheses"); + "missing parenthesis"); Write_Line (" r turn on warnings for redundant construct"); Write_Line (" R* turn off warnings for redundant construct"); Write_Line (" .r turn on warnings for object renaming function"); @@ -451,8 +453,8 @@ begin Write_Line (" .w* turn off warnings on pragma Warnings Off"); Write_Line (" x* turn on warnings for export/import"); Write_Line (" X turn off warnings for export/import"); - Write_Line (" .x turn on warnings for non-local exceptions"); - Write_Line (" .X* turn off warnings for non-local exceptions"); + Write_Line (" .x turn on warnings for non-local exception"); + Write_Line (" .X* turn off warnings for non-local exception"); Write_Line (" y* turn on warnings for Ada 2005 incompatibility"); Write_Line (" Y turn off warnings for Ada 2005 incompatibility"); Write_Line (" z* turn on warnings for convention/size/align " &