Commit bfb1147c by Eric Botcazou Committed by Pierre-Marie de Rodat

[Ada] Fix assertion failure on pragma Compile_Time_Error in generic unit

There is no point in validating 'Alignment or 'Size of an entity
declared in a generic unit after the back-end has been run, since such
an entity is not passed to the back-end, and this can even lead to an
assertion failure.

2018-11-14  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Don't
	register a compile-time warning or error for 'Alignment or 'Size
	of an entity declared in a generic unit.

gcc/testsuite/

	* gnat.dg/compile_time_error1.adb,
	gnat.dg/compile_time_error1.ads,
	gnat.dg/compile_time_error1_pkg.ads: New testcase.

From-SVN: r266127
parent b7c34dff
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
* sem_prag.adb (Process_Compile_Time_Warning_Or_Error): Don't
register a compile-time warning or error for 'Alignment or 'Size
of an entity declared in a generic unit.
2018-11-14 Justin Squirek <squirek@adacore.com> 2018-11-14 Justin Squirek <squirek@adacore.com>
* sem_ch8.adb (Use_One_Package): Add test for out-of-scope * sem_ch8.adb (Use_One_Package): Add test for out-of-scope
......
...@@ -7545,6 +7545,7 @@ package body Sem_Prag is ...@@ -7545,6 +7545,7 @@ package body Sem_Prag is
begin begin
if Nkind (N) = N_Attribute_Reference if Nkind (N) = N_Attribute_Reference
and then Is_Entity_Name (Prefix (N)) and then Is_Entity_Name (Prefix (N))
and then not Is_Generic_Unit (Scope (Entity (Prefix (N))))
then then
declare declare
Attr_Id : constant Attribute_Id := Attr_Id : constant Attribute_Id :=
2018-11-14 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/compile_time_error1.adb,
gnat.dg/compile_time_error1.ads,
gnat.dg/compile_time_error1_pkg.ads: New testcase.
2018-11-14 Justin Squirek <squirek@adacore.com> 2018-11-14 Justin Squirek <squirek@adacore.com>
* gnat.dg/generic_pkg.adb: New testcase. * gnat.dg/generic_pkg.adb: New testcase.
......
-- { dg-do compile }
package body Compile_Time_Error1 is
procedure Dummy is null;
end Compile_Time_Error1;
with Compile_Time_Error1_Pkg;
package Compile_Time_Error1 is
type Rec is record
I : Integer;
end record;
package Inst is new Compile_Time_Error1_Pkg (Rec);
procedure Dummy;
end Compile_Time_Error1;
generic
type T is private;
package Compile_Time_Error1_Pkg is
pragma Compile_Time_Error (T'Size not in 8 | 16 | 32, "type too large");
Data : T;
end Compile_Time_Error1_Pkg;
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