Commit 184a23e9 by Hristian Kirtchev Committed by Arnaud Charlet

exp_util.adb (Possible_Bit_Aligned_Component): Do not process an unanalyzed node.

2015-03-02  Hristian Kirtchev  <kirtchev@adacore.com>

	* exp_util.adb (Possible_Bit_Aligned_Component): Do not process
	an unanalyzed node.
	* sem_util.adb (Kill_Current_Values): Do not invalidate and
	de-null a constant.

From-SVN: r221107
parent df265bd2
2015-03-02 Hristian Kirtchev <kirtchev@adacore.com>
* exp_util.adb (Possible_Bit_Aligned_Component): Do not process
an unanalyzed node.
* sem_util.adb (Kill_Current_Values): Do not invalidate and
de-null a constant.
2015-03-02 Robert Dewar <dewar@adacore.com> 2015-03-02 Robert Dewar <dewar@adacore.com>
* sem_ch3.adb, exp_attr.adb, checks.adb, exp_aggr.adb: Minor * sem_ch3.adb, exp_attr.adb, checks.adb, exp_aggr.adb: Minor
......
...@@ -6938,6 +6938,13 @@ package body Exp_Util is ...@@ -6938,6 +6938,13 @@ package body Exp_Util is
function Possible_Bit_Aligned_Component (N : Node_Id) return Boolean is function Possible_Bit_Aligned_Component (N : Node_Id) return Boolean is
begin begin
-- Do not process an unanalyzed node because it is not yet decorated and
-- most checks performed below will fail.
if not Analyzed (N) then
return False;
end if;
case Nkind (N) is case Nkind (N) is
-- Case of indexed component -- Case of indexed component
......
...@@ -13012,20 +13012,33 @@ package body Sem_Util is ...@@ -13012,20 +13012,33 @@ package body Sem_Util is
Kill_Checks (Ent); Kill_Checks (Ent);
Set_Current_Value (Ent, Empty); Set_Current_Value (Ent, Empty);
if not Can_Never_Be_Null (Ent) then -- Do not reset the Is_Known_[Non_]Null and Is_Known_Valid flags
Set_Is_Known_Non_Null (Ent, False); -- for a constant. Once the constant is elaborated, its value is
end if; -- not changed, therefore the associated flags that describe the
-- value should not be modified either.
Set_Is_Known_Null (Ent, False); if Ekind (Ent) = E_Constant then
null;
-- Reset Is_Known_Valid unless type is always valid, or if we have -- Non-constant entities
-- a loop parameter (loop parameters are always valid, since their
-- bounds are defined by the bounds given in the loop header).
if not Is_Known_Valid (Etype (Ent)) else
and then Ekind (Ent) /= E_Loop_Parameter if not Can_Never_Be_Null (Ent) then
then Set_Is_Known_Non_Null (Ent, False);
Set_Is_Known_Valid (Ent, False); end if;
Set_Is_Known_Null (Ent, False);
-- Reset the Is_Known_Valid flag unless the type is always
-- valid. This does not apply to a loop parameter because its
-- bounds are defined by the loop header and therefore always
-- valid.
if not Is_Known_Valid (Etype (Ent))
and then Ekind (Ent) /= E_Loop_Parameter
then
Set_Is_Known_Valid (Ent, False);
end if;
end if; end if;
end if; end if;
end if; end if;
......
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