aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ada/ChangeLog7
-rw-r--r--gcc/ada/sem_ch13.adb3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/object_size1.adb13
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 558d5e0..61befab 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,12 @@
2019-08-20 Bob Duff <duff@adacore.com>
+ * 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.
+
+2019-08-20 Bob Duff <duff@adacore.com>
+
* errout.adb (Error_Msg_Internal): Set Warn_Err in case of
Is_Style_Msg.
* erroutc.adb (Output_Msg_Text): Do Warnings_Treated_As_Errors
diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb
index 4a07478..dec542b 100644
--- a/gcc/ada/sem_ch13.adb
+++ b/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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e4cc820..8940664 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2019-08-20 Bob Duff <duff@adacore.com>
+
+ * gnat.dg/object_size1.adb: New testcase.
+
2019-08-20 Eric Botcazou <ebotcazou@adacore.com>
* gcc.c-torture/execute/20190820-1.c: New test.
diff --git a/gcc/testsuite/gnat.dg/object_size1.adb b/gcc/testsuite/gnat.dg/object_size1.adb
new file mode 100644
index 0000000..85c6962
--- /dev/null
+++ b/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;