[Ada] Crash processing Valid_Scalars whose evaluation is always true

The compiler blows up generating code associated with occurrences of attribute
Valid_Scalars whose evaluation is always true. After this patch the following
test compiles fine.

2018-05-23  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* sem_attr.adb (Valid_Scalars): Do not invoke Error_Attr_P to report
	the warning on occurrences of this attribute whose evaluation is always
	true (since that subprogram aborts processing the attribute). In
	addition, replace the node by its boolean result 'True' (required
	because the backend has no knowledge of this attribute).

gcc/testsuite/

	* gnat.dg/valid_scalars1.adb: New testcase.

From-SVN: r260591
This commit is contained in:
Javier Miranda 2018-05-23 10:23:24 +00:00 committed by Pierre-Marie de Rodat
parent aeaa0347e9
commit 026733d84e
4 changed files with 27 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2018-05-23 Javier Miranda <miranda@adacore.com>
* sem_attr.adb (Valid_Scalars): Do not invoke Error_Attr_P to report
the warning on occurrences of this attribute whose evaluation is always
true (since that subprogram aborts processing the attribute). In
addition, replace the node by its boolean result 'True' (required
because the backend has no knowledge of this attribute).
2018-05-23 Bob Duff <duff@adacore.com>
* libgnat/a-convec.adb: (Insert, Insert_Space): Suppress warnings. The

View File

@ -6929,8 +6929,10 @@ package body Sem_Attr is
else
if not Scalar_Part_Present (P_Type) then
Error_Attr_P
("??attribute % always True, no scalars to check");
Error_Msg_Name_1 := Aname;
Error_Msg_F
("??attribute % always True, no scalars to check", P);
Set_Boolean_Result (N, True);
end if;
-- Attribute 'Valid_Scalars is illegal on unchecked union types

View File

@ -1,3 +1,7 @@
2018-05-23 Javier Miranda <miranda@adacore.com>
* gnat.dg/valid_scalars1.adb: New testcase.
2018-05-23 Ed Schonberg <schonberg@adacore.com>
* gnat.dg/iter1.adb, gnat.dg/iter1.ads: New testcase.

View File

@ -0,0 +1,11 @@
-- { dg-do compile }
-- { dg-options "-gnata -gnatws" }
procedure Valid_Scalars1 is
type Ptr is access Integer;
V1 : Ptr;
Check : Boolean := V1'Valid_Scalars;
begin
pragma Assert (Check);
end;