aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog42
-rw-r--r--gcc/ada/debug.adb7
-rw-r--r--gcc/ada/exp_pakd.adb69
-rw-r--r--gcc/ada/freeze.adb117
-rw-r--r--gcc/ada/gnatcmd.adb27
-rw-r--r--gcc/ada/layout.adb13
-rw-r--r--gcc/ada/sem_ch12.adb1
-rw-r--r--gcc/ada/sem_ch5.adb1
-rw-r--r--gcc/ada/sem_ch8.adb24
-rw-r--r--gcc/ada/sem_elab.adb8
-rw-r--r--gcc/ada/sem_res.adb3
-rw-r--r--gcc/ada/sem_util.adb4
12 files changed, 202 insertions, 114 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index dd5f7e1..c74abd0 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,45 @@
+2014-05-21 Robert Dewar <dewar@adacore.com>
+
+ * gnatcmd.adb: Minor error msg changes (no upper case letter
+ at start).
+ * sem_ch12.adb, sem_ch5.adb, sem_res.adb, sem_util.adb: Minor
+ reformatting.
+
+2014-05-21 Robert Dewar <dewar@adacore.com>
+
+ * debug.adb: Debug flag -gnatd.G inhibits static elab tracing
+ via generic formals.
+ * sem_elab.adb (Is_Call_Of_Generic_Formal): Return False if
+ -gnatd.G is set.
+
+2014-05-21 Thomas Quinot <quinot@adacore.com>
+
+ * exp_pakd.adb (Revert_Storage_Order): Renamed from Byte_Swap to
+ more accurately describe that this subprogram needs to come into
+ play also in cases where no byte swapping is involved, because
+ it also takes care of some required shifts (left-justification
+ of values).
+
+2014-05-21 Thomas Quinot <quinot@adacore.com>
+
+ * freeze.adb (Check_Component_Storage_Order): Indicate whether
+ a Scalar_Storage_Order attribute definition is present for the
+ component's type.
+ (Freeze_Record_Type): Suppress junk warnings
+ about purportedly junk Bit_Order / Scalar_Storage_Order attribute
+ definitions.
+
+2014-05-21 Robert Dewar <dewar@adacore.com>
+
+ * sem_ch8.adb (Analyze_Subprogram_Renaming): Put back call
+ to Kill_Elaboration_Checks.
+
+2014-05-21 Gary Dismukes <dismukes@adacore.com>
+
+ * layout.adb (Assoc_Add): Suppress the optimization of the (E
+ - C1) + C2 case, when the expression type is unsigned and C1 <
+ C2, to avoid creating a negative literal when folding.
+
2014-05-21 Hristian Kirtchev <kirtchev@adacore.com>
* freeze.adb (Freeze_Record_Type): Update the use of
diff --git a/gcc/ada/debug.adb b/gcc/ada/debug.adb
index d5fae27..8399a2c 100644
--- a/gcc/ada/debug.adb
+++ b/gcc/ada/debug.adb
@@ -124,7 +124,7 @@ package body Debug is
-- d.D
-- d.E Turn selected errors into warnings
-- d.F Debug mode for GNATprove
- -- d.G
+ -- d.G Ignore calls through generic formal parameters for elaboration
-- d.H
-- d.I Do not ignore enum representation clauses in CodePeer mode
-- d.J Disable parallel SCIL generation mode
@@ -623,6 +623,11 @@ package body Debug is
-- d.F Sets GNATprove_Mode to True. This allows debugging the frontend in
-- the special mode used by GNATprove.
+ -- d.G Previously the compiler ignored calls via generic formal parameters
+ -- when doing the analysis for the static elaboration model. This is
+ -- now fixed, but we provide this debug flag to revert to the previous
+ -- situation of ignoring such calls to aid in transition.
+
-- d.I Do not ignore enum representation clauses in CodePeer mode.
-- The default of ignoring representation clauses for enumeration
-- types in CodePeer is good for the majority of Ada code, but in some
diff --git a/gcc/ada/exp_pakd.adb b/gcc/ada/exp_pakd.adb
index fcaba80..9569979 100644
--- a/gcc/ada/exp_pakd.adb
+++ b/gcc/ada/exp_pakd.adb
@@ -543,25 +543,19 @@ package body Exp_Pakd is
-- array type on the fly). Such actions are inserted into the tree
-- directly using Insert_Action.
- function Byte_Swap
- (N : Node_Id;
- Left_Justify : Boolean := False;
- Right_Justify : Boolean := False) return Node_Id;
- -- Wrap N in a call to a byte swapping function, with appropriate type
- -- conversions. If Left_Justify is set True, the value is left justified
- -- before swapping. If Right_Justify is set True, the value is right
- -- justified after swapping. The Etype of the returned node is an
- -- integer type of an appropriate power-of-2 size.
-
- ---------------
- -- Byte_Swap --
- ---------------
-
- function Byte_Swap
- (N : Node_Id;
- Left_Justify : Boolean := False;
- Right_Justify : Boolean := False) return Node_Id
- is
+ function Revert_Storage_Order (N : Node_Id) return Node_Id;
+ -- Perform appropriate justification and byte ordering adjustments for N,
+ -- an element of a packed array type, when both the component type and
+ -- the enclosing packed array type have reverse scalar storage order.
+ -- On little-endian targets, the value is left justified before byte
+ -- swapping. The Etype of the returned expression is an integer type of
+ -- an appropriate power-of-2 size.
+
+ --------------------------
+ -- Revert_Storage_Order --
+ --------------------------
+
+ function Revert_Storage_Order (N : Node_Id) return Node_Id is
Loc : constant Source_Ptr := Sloc (N);
T : constant Entity_Id := Etype (N);
T_Size : constant Uint := RM_Size (T);
@@ -571,16 +565,21 @@ package body Exp_Pakd is
Swap_T : Entity_Id;
-- Swapping function
- Arg : Node_Id;
- Swapped : Node_Id;
- Shift : Uint;
+ Arg : Node_Id;
+ Adjusted : Node_Id;
+ Shift : Uint;
begin
if T_Size <= 8 then
+
+ -- Array component size is less than a byte: no swapping needed
+
Swap_F := Empty;
Swap_T := RTE (RE_Unsigned_8);
else
+ -- Select byte swapping function depending on array component size
+
if T_Size <= 16 then
Swap_RE := RE_Bswap_16;
@@ -600,7 +599,7 @@ package body Exp_Pakd is
Arg := RJ_Unchecked_Convert_To (Swap_T, N);
- if Left_Justify and then Shift > Uint_0 then
+ if not Bytes_Big_Endian and then Shift > Uint_0 then
Arg :=
Make_Op_Shift_Left (Loc,
Left_Opnd => Arg,
@@ -608,24 +607,17 @@ package body Exp_Pakd is
end if;
if Present (Swap_F) then
- Swapped :=
+ Adjusted :=
Make_Function_Call (Loc,
Name => New_Occurrence_Of (Swap_F, Loc),
Parameter_Associations => New_List (Arg));
else
- Swapped := Arg;
- end if;
-
- if Right_Justify and then Shift > Uint_0 then
- Swapped :=
- Make_Op_Shift_Right (Loc,
- Left_Opnd => Swapped,
- Right_Opnd => Make_Integer_Literal (Loc, Shift));
+ Adjusted := Arg;
end if;
- Set_Etype (Swapped, Swap_T);
- return Swapped;
- end Byte_Swap;
+ Set_Etype (Adjusted, Swap_T);
+ return Adjusted;
+ end Revert_Storage_Order;
------------------------------
-- Compute_Linear_Subscript --
@@ -2095,15 +2087,10 @@ package body Exp_Pakd is
-- it back to its expected endianness after extraction.
if Reverse_Storage_Order (Atyp)
- and then Esize (Atyp) > 8
and then (Is_Record_Type (Ctyp) or else Is_Array_Type (Ctyp))
and then Reverse_Storage_Order (Ctyp)
then
- Arg :=
- Byte_Swap
- (Arg,
- Left_Justify => not Bytes_Big_Endian,
- Right_Justify => False);
+ Arg := Revert_Storage_Order (Arg);
end if;
-- We needed to analyze this before we do the unchecked convert
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index e48cb9f..e091cea 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -90,16 +90,19 @@ package body Freeze is
-- performed only after the object has been frozen.
procedure Check_Component_Storage_Order
- (Encl_Type : Entity_Id;
- Comp : Entity_Id;
- ADC : Node_Id);
+ (Encl_Type : Entity_Id;
+ Comp : Entity_Id;
+ ADC : Node_Id;
+ Comp_ADC_Present : out Boolean);
-- For an Encl_Type that has a Scalar_Storage_Order attribute definition
-- clause, verify that the component type has an explicit and compatible
-- attribute/aspect. For arrays, Comp is Empty; for records, it is the
-- entity of the component under consideration. For an Encl_Type that
-- does not have a Scalar_Storage_Order attribute definition clause,
-- verify that the component also does not have such a clause.
- -- ADC is the attribute definition clause if present (or Empty).
+ -- ADC is the attribute definition clause if present (or Empty). On return,
+ -- Comp_ADC_Present is set True if the component has a Scalar_Storage_Order
+ -- attribute definition clause.
procedure Check_Strict_Alignment (E : Entity_Id);
-- E is a base type. If E is tagged or has a component that is aliased
@@ -1070,9 +1073,10 @@ package body Freeze is
-----------------------------------
procedure Check_Component_Storage_Order
- (Encl_Type : Entity_Id;
- Comp : Entity_Id;
- ADC : Node_Id)
+ (Encl_Type : Entity_Id;
+ Comp : Entity_Id;
+ ADC : Node_Id;
+ Comp_ADC_Present : out Boolean)
is
Comp_Type : Entity_Id;
Comp_ADC : Node_Id;
@@ -1124,12 +1128,13 @@ package body Freeze is
Comp_ADC := Get_Attribute_Definition_Clause
(First_Subtype (Comp_Type),
Attribute_Scalar_Storage_Order);
+ Comp_ADC_Present := Present (Comp_ADC);
-- Case of enclosing type not having explicit SSO: component cannot
-- have it either.
if No (ADC) then
- if Present (Comp_ADC) then
+ if Comp_ADC_Present then
Error_Msg_N
("composite type must have explicit scalar storage order",
Err_Node);
@@ -2350,14 +2355,19 @@ package body Freeze is
-- Check for scalar storage order
- Check_Component_Storage_Order
- (Encl_Type => Arr,
- Comp => Empty,
- ADC => Get_Attribute_Definition_Clause
- (First_Subtype (Arr),
- Attribute_Scalar_Storage_Order));
+ declare
+ Dummy : Boolean;
+ begin
+ Check_Component_Storage_Order
+ (Encl_Type => Arr,
+ Comp => Empty,
+ ADC => Get_Attribute_Definition_Clause
+ (First_Subtype (Arr),
+ Attribute_Scalar_Storage_Order),
+ Comp_ADC_Present => Dummy);
+ end;
- -- Processing that is done only for subtypes
+ -- Processing that is done only for subtypes
else
-- Acquire alignment from base type
@@ -2549,8 +2559,8 @@ package body Freeze is
procedure Freeze_Record_Type (Rec : Entity_Id) is
Comp : Entity_Id;
IR : Node_Id;
- ADC : Node_Id;
Prev : Entity_Id;
+ ADC : Node_Id;
Junk : Boolean;
pragma Warnings (Off, Junk);
@@ -2560,6 +2570,9 @@ package body Freeze is
-- stack. Needed for the analysis of delayed aspects specified to the
-- components of Rec.
+ SSO_ADC : Node_Id;
+ -- Scalar_Storage_Order attribute definition clause for the record
+
Unplaced_Component : Boolean := False;
-- Set True if we find at least one component with no component
-- clause (used to warn about useless Pack pragmas).
@@ -2574,6 +2587,10 @@ package body Freeze is
-- is used to prevent Implicit_Packing of the record, since packing
-- cannot modify the size of alignment of an aliased component.
+ SSO_ADC_Component : Boolean := False;
+ -- Set True if we find at least one component whose type has a
+ -- Scalar_Storage_Order attribute definition clause.
+
All_Scalar_Components : Boolean := True;
-- Set False if we encounter a component of a non-scalar type
@@ -3014,56 +3031,80 @@ package body Freeze is
Next_Entity (Comp);
end loop;
- ADC := Get_Attribute_Definition_Clause
- (Rec, Attribute_Scalar_Storage_Order);
+ SSO_ADC := Get_Attribute_Definition_Clause
+ (Rec, Attribute_Scalar_Storage_Order);
+
+ -- Check consistent attribute setting on component types
+
+ declare
+ Comp_ADC_Present : Boolean;
+ begin
+ Comp := First_Component (Rec);
+ while Present (Comp) loop
+ Check_Component_Storage_Order
+ (Encl_Type => Rec,
+ Comp => Comp,
+ ADC => SSO_ADC,
+ Comp_ADC_Present => Comp_ADC_Present);
+ SSO_ADC_Component := SSO_ADC_Component or Comp_ADC_Present;
+ Next_Component (Comp);
+ end loop;
+ end;
- if Present (ADC) then
+ if Present (SSO_ADC) then
-- Check compatibility of Scalar_Storage_Order with Bit_Order, if
-- the former is specified.
if Reverse_Bit_Order (Rec) /= Reverse_Storage_Order (Rec) then
- -- Note: report error on Rec, not on ADC, as ADC may apply to
- -- an ancestor type.
+ -- Note: report error on Rec, not on SSO_ADC, as ADC may apply
+ -- to some ancestor type.
- Error_Msg_Sloc := Sloc (ADC);
+ Error_Msg_Sloc := Sloc (SSO_ADC);
Error_Msg_N
("scalar storage order for& specified# inconsistent with "
& "bit order", Rec);
end if;
- -- Warn if there is a Scalar_Storage_Order but no component clause
- -- (or pragma Pack).
+ -- Warn if there is an Scalar_Storage_Order attribute definition
+ -- clause but no component clause, no component that itself has
+ -- such an attribute definition, and no pragma Pack.
- if not (Placed_Component or else Is_Packed (Rec)) then
+ if not (Placed_Component
+ or else
+ SSO_ADC_Component
+ or else
+ Is_Packed (Rec))
+ then
Error_Msg_N
("??scalar storage order specified but no component clause",
- ADC);
+ SSO_ADC);
end if;
end if;
- -- Check consistent attribute setting on component types
-
- Comp := First_Component (Rec);
- while Present (Comp) loop
- Check_Component_Storage_Order
- (Encl_Type => Rec, Comp => Comp, ADC => ADC);
- Next_Component (Comp);
- end loop;
-
- -- Deal with Bit_Order aspect specifying a non-default bit order
+ -- Deal with Bit_Order aspect
ADC := Get_Attribute_Definition_Clause (Rec, Attribute_Bit_Order);
if Present (ADC) and then Base_Type (Rec) = Rec then
- if not (Placed_Component or else Is_Packed (Rec)) then
+ if not (Placed_Component
+ or else
+ Present (SSO_ADC)
+ or else
+ Is_Packed (Rec))
+ then
+ -- Warn if clause has no effect when no component clause is
+ -- present, but suppress warning if the Bit_Order is required
+ -- due to the presence of a Scalar_Storage_Order attribute.
+
Error_Msg_N
("??bit order specification has no effect", ADC);
Error_Msg_N
("\??since no component clauses were specified", ADC);
- -- Here is where we do the processing for reversed bit order
+ -- Here is where we do the processing to adjust component clauses
+ -- for reversed bit order.
elsif Reverse_Bit_Order (Rec)
and then not Reverse_Storage_Order (Rec)
diff --git a/gcc/ada/gnatcmd.adb b/gcc/ada/gnatcmd.adb
index b2a865c..50bc3ad 100644
--- a/gcc/ada/gnatcmd.adb
+++ b/gcc/ada/gnatcmd.adb
@@ -1527,7 +1527,7 @@ begin
if Command_List (The_Command).VMS_Only then
Non_VMS_Usage;
Fail
- ("Command """
+ ("command """
& Command_List (The_Command).Cname.all
& """ can only be used on VMS");
end if;
@@ -1542,13 +1542,13 @@ begin
begin
Alternate := Alternate_Command'Value
- (Argument (Command_Arg));
+ (Argument (Command_Arg));
The_Command := Corresponding_To (Alternate);
exception
when Constraint_Error =>
Non_VMS_Usage;
- Fail ("Unknown command: " & Argument (Command_Arg));
+ Fail ("unknown command: " & Argument (Command_Arg));
end;
end;
@@ -1578,12 +1578,9 @@ begin
exception
when others =>
- Put
- (Standard_Error, "Cannot open argument file """);
- Put
- (Standard_Error,
- The_Arg (The_Arg'First + 1 .. The_Arg'Last));
-
+ Put (Standard_Error, "Cannot open argument file """);
+ Put (Standard_Error,
+ The_Arg (The_Arg'First + 1 .. The_Arg'Last));
Put_Line (Standard_Error, """");
raise Error_Exit;
end;
@@ -1816,7 +1813,7 @@ begin
end case;
else
Fail ("invalid verbosity level: "
- & Argv (Argv'First + 3 .. Argv'Last));
+ & Argv (Argv'First + 3 .. Argv'Last));
end if;
Remove_Switch (Arg_Num);
@@ -2104,13 +2101,13 @@ begin
end if;
end;
- if The_Command = Bind
- or else The_Command = Link
- or else The_Command = Elim
+ if The_Command = Bind or else
+ The_Command = Link or else
+ The_Command = Elim
then
if Project.Object_Directory.Name = No_Path then
- Fail ("project " & Get_Name_String (Project.Display_Name) &
- " has no object directory");
+ Fail ("project " & Get_Name_String (Project.Display_Name)
+ & " has no object directory");
end if;
Change_Dir (Get_Name_String (Project.Object_Directory.Name));
diff --git a/gcc/ada/layout.adb b/gcc/ada/layout.adb
index 829d75c..fe8ea04 100644
--- a/gcc/ada/layout.adb
+++ b/gcc/ada/layout.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2013, Free Software Foundation, Inc. --
+-- Copyright (C) 2001-2014, 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- --
@@ -353,7 +353,7 @@ package body Layout is
elsif Nkind (L) = N_Op_Subtract then
- -- (C1 - E) + C2 = (C1 + C2) + E
+ -- (C1 - E) + C2 = (C1 + C2) - E
if Compile_Time_Known_Value (Sinfo.Left_Opnd (L)) then
Rewrite_Integer
@@ -363,7 +363,14 @@ package body Layout is
-- (E - C1) + C2 = E - (C1 - C2)
- elsif Compile_Time_Known_Value (Sinfo.Right_Opnd (L)) then
+ -- If the type is unsigned, then only do the optimization if
+ -- C1 >= C2, to avoid creating a negative literal that can't be
+ -- used with the unsigned type.
+
+ elsif Compile_Time_Known_Value (Sinfo.Right_Opnd (L))
+ and then (not Is_Unsigned_Type (Etype (Sinfo.Right_Opnd (L)))
+ or else Expr_Value (Sinfo.Right_Opnd (L)) >= R)
+ then
Rewrite_Integer
(Sinfo.Right_Opnd (L),
Expr_Value (Sinfo.Right_Opnd (L)) - R);
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 5494ab5..2d74876 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -10070,7 +10070,6 @@ package body Sem_Ch12 is
Set_Corresponding_Spec (Act_Body, Act_Decl_Id);
Check_Generic_Actuals (Act_Decl_Id, False);
-
Check_Initialized_Types;
-- Install primitives hidden at the point of the instantiation but
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb
index 60080ed..db7e985 100644
--- a/gcc/ada/sem_ch5.adb
+++ b/gcc/ada/sem_ch5.adb
@@ -1875,7 +1875,6 @@ package body Sem_Ch5 is
if No (Elt) then
Error_Msg_N
("missing Element primitive for iteration", N);
-
else
Set_Etype (Def_Id, Etype (Elt));
end if;
diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb
index 4c5147c..43cd4fd 100644
--- a/gcc/ada/sem_ch8.adb
+++ b/gcc/ada/sem_ch8.adb
@@ -2505,26 +2505,25 @@ package body Sem_Ch8 is
end if;
end if;
- -- At this point, we used to have the following, but we removed it
- -- because it was certainly wrong for generic formal parameters in
- -- at least some cases, causing elaboration checks to be skipped.
- -- Possibly it is helpful in some other cases, but it caused no
- -- regressions to remove it completely.
-
-- There is no need for elaboration checks on the new entity, which may
-- be called before the next freezing point where the body will appear.
-- Elaboration checks refer to the real entity, not the one created by
-- the renaming declaration.
- -- Set_Kill_Elaboration_Checks (New_S, True);
+ Set_Kill_Elaboration_Checks (New_S, True);
+
+ -- If we had a previous error, indicate a completely is present to stop
+ -- junk cascaded messages, but don't take any further action.
if Etype (Nam) = Any_Type then
Set_Has_Completion (New_S);
return;
+ -- Case where name has the form of a selected component
+
elsif Nkind (Nam) = N_Selected_Component then
- -- A prefix of the form A.B can designate an entry of task A, a
+ -- A name which has the form A.B can designate an entry of task A, a
-- protected operation of protected object A, or finally a primitive
-- operation of object A. In the later case, A is an object of some
-- tagged type, or an access type that denotes one such. To further
@@ -2573,6 +2572,8 @@ package body Sem_Ch8 is
end if;
end;
+ -- Case where name is an explicit dereference X.all
+
elsif Nkind (Nam) = N_Explicit_Dereference then
-- Renamed entity is designated by access_to_subprogram expression.
@@ -2581,14 +2582,21 @@ package body Sem_Ch8 is
Analyze_Renamed_Dereference (N, New_S, Present (Rename_Spec));
return;
+ -- Indexed component
+
elsif Nkind (Nam) = N_Indexed_Component then
Analyze_Renamed_Family_Member (N, New_S, Present (Rename_Spec));
return;
+ -- Character literal
+
elsif Nkind (Nam) = N_Character_Literal then
Analyze_Renamed_Character (N, New_S, Present (Rename_Spec));
return;
+ -- Only remaining case is where we have a non-entity name, or a
+ -- renaming of some other non-overloadable entity.
+
elsif not Is_Entity_Name (Nam)
or else not Is_Overloadable (Entity (Nam))
then
diff --git a/gcc/ada/sem_elab.adb b/gcc/ada/sem_elab.adb
index 02762ff..7f494d8 100644
--- a/gcc/ada/sem_elab.adb
+++ b/gcc/ada/sem_elab.adb
@@ -552,6 +552,10 @@ package body Sem_Elab is
begin
return Nkind_In (N, N_Function_Call, N_Procedure_Call_Statement)
+ -- Always return False if debug flag -gnatd.G is set
+
+ and then not Debug_Flag_Dot_GG
+
-- For now, we detect this by looking for the strange identifier
-- node, whose Chars reflect the name of the generic formal, but
-- the Chars of the Entity references the generic actual.
@@ -564,10 +568,12 @@ package body Sem_Elab is
begin
-- If the call is known to be within a local Suppress Elaboration
- -- pragma, nothing to check. This can happen in task bodies.
+ -- pragma, nothing to check. This can happen in task bodies. But
+ -- we ignore this for a call to a generic formal.
if Nkind (N) in N_Subprogram_Call
and then No_Elaboration_Check (N)
+ and then not Is_Call_Of_Generic_Formal
then
return;
end if;
diff --git a/gcc/ada/sem_res.adb b/gcc/ada/sem_res.adb
index 2273fe8..c1f9f8c 100644
--- a/gcc/ada/sem_res.adb
+++ b/gcc/ada/sem_res.adb
@@ -6583,8 +6583,7 @@ package body Sem_Res is
and then Is_SPARK_Volatile (E)
and then Comes_From_Source (E)
and then
- (Async_Writers_Enabled (E)
- or else Effective_Reads_Enabled (E))
+ (Async_Writers_Enabled (E) or else Effective_Reads_Enabled (E))
then
-- The volatile object can appear on either side of an assignment
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 29de16b..84570fb 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -7500,9 +7500,7 @@ package body Sem_Util is
elsif Property = Name_Effective_Writes
and then
- (Present (EW)
- or else
- (No (AR) and then No (AW) and then No (ER)))
+ (Present (EW) or else (No (AR) and then No (AW) and then No (ER)))
then
return True;