diff options
author | Bob Duff <duff@adacore.com> | 2019-08-20 09:48:57 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-08-20 09:48:57 +0000 |
commit | afdc759841f8f4f464f3d5a2ba8e05e9a8e41d72 (patch) | |
tree | d6b32bef1abb656d0d22855f4f90e9ff53a386f3 | |
parent | 6cd8f5b09415ec799f797e5b521afd18552cd747 (diff) | |
download | gcc-afdc759841f8f4f464f3d5a2ba8e05e9a8e41d72.zip gcc-afdc759841f8f4f464f3d5a2ba8e05e9a8e41d72.tar.gz gcc-afdc759841f8f4f464f3d5a2ba8e05e9a8e41d72.tar.bz2 |
[Ada] Object_Size clause specifying 0 bits is illegal
The patch gives an error message on "for T'Object_Size use 0;".
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.
From-SVN: r274722
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/sem_ch13.adb | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/object_size1.adb | 13 |
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; |