[Ada] Prohibit concurrent types in Ghost regions

Programming / Compilers / GCC - pmderodat [138bc75d-0d04-0410-961f-82ee72b054a4] - 11 January 2018 08:55 EST

This patch ensures that single concurrent type declarations are marked as Ghost when they appear within a Ghost region. In addition, the patch verifies that no concurrent type is declared within a Ghost region and issues an error.


-- Source --


-- types.ads

package Types with Ghost is protected Prot_Obj is -- Error end Prot_Obj;

protected type Prot_Typ is -- Error end Prot_Typ;

task Task_Obj; -- Error

task type Task_Typ; -- Error end Types;


-- Compilation and output --


$ gcc -c types.ads types.ads:2:14: ghost type "Prot_Obj" cannot be concurrent types.ads:5:19: ghost type "Prot_Typ" cannot be concurrent types.ads:8:09: ghost type "Task_Obj" cannot be concurrent types.ads:10:14: ghost type "Task_Typ" cannot be concurrent

2018-01-11 Hristian Kirtchev

gcc/ada/

- freeze.adb (Freeze_Entity): Ensure that a Ghost type is not concurrent, nor effectively volatile.
- ghost.adb (Check_Ghost_Type): New routine.
- ghost.ads (Check_Ghost_Type): New routine.
- sem_util.adb (Is_Declaration): Reimplemented. The routine can now consider specific subsets of declarations. (Is_Declaration_Other_Than_Renaming): Removed. Its functionality is replicated by Is_Declaration.
- sem_util.ads (Is_Declaration): New parameter profile. Update the comment on usage. (Is_Declaration_Other_Than_Renaming): Removed.

b0d43bae94e [Ada] Prohibit concurrent types in Ghost regions
gcc/ada/ChangeLog | 14 +++++++
gcc/ada/freeze.adb | 20 +++------
gcc/ada/ghost.adb | 36 ++++++++++++++++
gcc/ada/ghost.ads | 4 ++
gcc/ada/sem_util.adb | 113 ++++++++++++++++++++++++++++++++++++++++++---------
gcc/ada/sem_util.ads | 38 ++++++++++++++---
6 files changed, 185 insertions(+), 40 deletions(-)

Upstream: gcc.gnu.org


  • Share