+2010-09-09 Ed Schonberg <schonberg@adacore.com>
+
+ * sem_eval.adb (Is_Same_Value): Two occurrences of the same
+ discriminant cannot be assumed to be the same value because they may
+ refer to bounds of a component of two different instances of a
+ discriminated type.
+
+2010-09-09 Gary Dismukes <dismukes@adacore.com>
+
+ * checks.adb (Apply_Arithmetic_Overflow_Check): When converting the
+ operands of an operator to the type of an enclosing conversion, rewrite
+ the operator so the conversion can't be flagged as redundant.
+ Remove useless assignments to Typ and Rtyp.
+
+2010-09-09 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat_ugn.texi: Fix another long line.
+
+2010-09-09 Bob Duff <duff@adacore.com>
+
+ * sem_warn.adb (Output_Reference_Error): Don't warn for renames read
+ but never assigned.
+
2010-09-09 Matthew Heaney <heaney@adacore.com>
* a-convec.adb, a-coinve.adb (Clear, Delete, Delete_Last, Finalize,
procedure Apply_Arithmetic_Overflow_Check (N : Node_Id) is
Loc : constant Source_Ptr := Sloc (N);
- Typ : Entity_Id := Etype (N);
- Rtyp : Entity_Id := Root_Type (Typ);
+ Typ : constant Entity_Id := Etype (N);
+ Rtyp : constant Entity_Id := Root_Type (Typ);
begin
-- An interesting special case. If the arithmetic operation appears as
Subtype_Mark => New_Occurrence_Of (Target_Type, Loc),
Expression => Relocate_Node (Right_Opnd (N))));
+ -- Rewrite the conversion operand so that the original
+ -- node is retained, in order to avoid the warning for
+ -- redundant conversions in Resolve_Type_Conversion.
+
+ Rewrite (N, Relocate_Node (N));
+
Set_Etype (N, Target_Type);
- Typ := Target_Type;
- Rtyp := Root_Type (Typ);
+
Analyze_And_Resolve (Left_Opnd (N), Target_Type);
Analyze_And_Resolve (Right_Opnd (N), Target_Type);
@item ^-O3^/OPTIMIZE=INLINING^
Full optimization as in @option{-O2};
-also uses more aggressive automatic inlining of subprograms within a unit (@pxref{Inlining of Subprograms}) and attemps to vectorize loops.
+also uses more aggressive automatic inlining of subprograms within a unit
+(@pxref{Inlining of Subprograms}) and attemps to vectorize loops.
@item ^-Os^/OPTIMIZE=SPACE^
Optimize space usage (code and data) of resulting program.
-- types, since we may have two NaN values and they should never
-- compare equal.
+ -- If the entity is a discriminant, the two expressions may be
+ -- bounds of components of objects of the same discriminated
+ -- type. The values of the discriminants are not static, and
+ -- therefore the result is unknown.
+
if Nkind_In (Lf, N_Identifier, N_Expanded_Name)
and then Nkind_In (Rf, N_Identifier, N_Expanded_Name)
and then Entity (Lf) = Entity (Rf)
+ and then Ekind (Entity (Lf)) /= E_Discriminant
and then Present (Entity (Lf))
and then not Is_Floating_Point_Type (Etype (L))
and then not Is_Volatile_Reference (L)
procedure Output_Reference_Error (M : String) is
begin
- -- Never issue messages for internal names
+ -- Never issue messages for internal names, nor for renamings
- if Is_Internal_Name (Chars (E1)) then
+ if Is_Internal_Name (Chars (E1))
+ or else Nkind (Parent (E1)) = N_Object_Renaming_Declaration
+ then
return;
end if;