Commit ed32b82e by Ed Schonberg Committed by Arnaud Charlet

sem_attr.adb: (Analyze_Attribute, case 'Range): when expanding X'range (N) into X'First (N) ..

2011-09-02  Ed Schonberg  <schonberg@adacore.com>

	* sem_attr.adb: (Analyze_Attribute, case 'Range): when expanding
	X'range (N) into X'First (N) ..  X'Last (N), do not share the
	dimension indicator N, if present. Even though it is a static
	constant, its source location may be modified when printing
	expanded code under -gnatDL, and node sharing will lead to chaos
	in Sprint on large files, by generating a sloc value that does
	not correspond to any source file.

From-SVN: r178437
parent f7bb41af
2011-09-02 Ed Schonberg <schonberg@adacore.com>
* sem_attr.adb: (Analyze_Attribute, case 'Range): when expanding
X'range (N) into X'First (N) .. X'Last (N), do not share the
dimension indicator N, if present. Even though it is a static
constant, its source location may be modified when printing
expanded code under -gnatDL, and node sharing will lead to chaos
in Sprint on large files, by generating a sloc value that does
not correspond to any source file.
2011-09-02 Bob Duff <duff@adacore.com>
* einfo.adb: (Has_Xref_Entry): Do not call
......
......@@ -8871,6 +8871,7 @@ package body Sem_Attr is
declare
LB : Node_Id;
HB : Node_Id;
Dims : List_Id;
begin
if not Is_Entity_Name (P)
......@@ -8879,18 +8880,30 @@ package body Sem_Attr is
Resolve (P);
end if;
Dims := Expressions (N);
HB :=
Make_Attribute_Reference (Loc,
Prefix =>
Duplicate_Subexpr (P, Name_Req => True),
Attribute_Name => Name_Last,
Expressions => Expressions (N));
Expressions => Dims);
LB :=
Make_Attribute_Reference (Loc,
Prefix => P,
Prefix => P,
Attribute_Name => Name_First,
Expressions => Expressions (N));
Expressions => (Dims));
-- Do not share the dimension indicator, if present. Even
-- though it is a static constant, its source location
-- may be modified when printing expanded code and node
-- sharing will lead to chaos in Sprint.
if Present (Dims) then
Set_Expressions (LB,
New_List (New_Copy_Tree (First (Dims))));
end if;
-- If the original was marked as Must_Not_Freeze (see code
-- in Sem_Ch3.Make_Index), then make sure the rewriting
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment