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.
Tested on x86_64-pc-linux-gnu, committed on trunk
2018-05-23 Javier Miranda <mira...@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.
--- gcc/ada/sem_attr.adb
+++ gcc/ada/sem_attr.adb
@@ -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
--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/valid_scalars1.adb
@@ -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;