[Ada] Crash in task body reference to discriminant

The compiler may crash processing the successor or predecessor of a task
type discrete discriminant.

gcc/ada/

	* sem_attr.adb (Resolve_Attribute): Ensure that attribute
	expressions are resolved at this stage; required for preanalyzed
	references to discriminants since their resolution (and
	expansion) will take care of updating their Entity attribute to
	reference their discriminal.
This commit is contained in:
Javier Miranda 2022-02-06 11:23:53 +00:00 committed by Pierre-Marie de Rodat
parent 6a28d40dc4
commit fafccfbf77
1 changed files with 22 additions and 0 deletions

View File

@ -12500,6 +12500,28 @@ package body Sem_Attr is
when others => null;
end case;
-- Ensure that attribute expressions are resolved at this stage;
-- required for preanalyzed references to discriminants since
-- their resolution (and expansion) will take care of updating
-- their Entity attribute to reference their discriminal.
if Expander_Active
and then Present (Expressions (N))
then
declare
Expr : Node_Id := First (Expressions (N));
begin
while Present (Expr) loop
if not Analyzed (Expr) then
Resolve (Expr, Etype (Expr));
end if;
Next (Expr);
end loop;
end;
end if;
-- If the prefix of the attribute is a class-wide type then it
-- will be expanded into a dispatching call to a predefined
-- primitive. Therefore we must check for potential violation