This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Ada] Object_Size clause specifying 0 bits is illegal


The patch gives an error message on "for T'Object_Size use 0;".

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_ch13.adb (Object_Size): Give an error for zero. It really
	rubs me the wrong way that we don't honor "for T'Object_Size use
	0;", but it's not important enough to fix. In any case, if we're
	not going to obey the clause, we should give an error.

gcc/testsuite/

	* gnat.dg/object_size1.adb: New testcase.
--- gcc/ada/sem_ch13.adb
+++ gcc/ada/sem_ch13.adb
@@ -5812,6 +5812,9 @@ package body Sem_Ch13 is
                if ASIS_Mode then
                   null;
 
+               elsif Size <= 0 then
+                  Error_Msg_N ("Object_Size must be positive", Expr);
+
                elsif Is_Scalar_Type (U_Ent) then
                   if Size /= 8 and then Size /= 16 and then Size /= 32
                     and then UI_Mod (Size, 64) /= 0

--- /dev/null
new file mode 100644
+++ gcc/testsuite/gnat.dg/object_size1.adb
@@ -0,0 +1,13 @@
+--  { dg-do compile }
+
+with Text_IO; use Text_IO;
+
+procedure Object_Size1 is
+  type Zero_Size_Type is (Solo);
+
+  for Zero_Size_Type'Size use 0;
+  for Zero_Size_Type'Object_Size use 0;  --  { dg-error "Object_Size must be positive" }
+begin
+  Put_Line (Zero_Size_Type'Size'Image);
+  Put_Line (Zero_Size_Type'Object_Size'Image);
+end Object_Size1;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]