aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.c
diff options
context:
space:
mode:
authorGary Dismukes <dismukes@adacore.com>2021-09-01 19:58:14 -0400
committerPierre-Marie de Rodat <derodat@adacore.com>2021-10-04 08:45:11 +0000
commit70aec3a1b8efd09a951e4d52f396345a740879d3 (patch)
tree2dec51ef1ec0b7acd1175728e9707c96cdd4a4fd /gcc/expr.c
parenta5740f2b7285f950e68d7790c37e28a5b768b4e8 (diff)
downloadgcc-70aec3a1b8efd09a951e4d52f396345a740879d3.zip
gcc-70aec3a1b8efd09a951e4d52f396345a740879d3.tar.gz
gcc-70aec3a1b8efd09a951e4d52f396345a740879d3.tar.bz2
[Ada] Completion of support for AI12-0409 (attribute Preelaborable_Initialization)
gcc/ada/ * sem_ch7.adb (Analyze_Package_Specification): For types marked as Must_Have_Preelab_Init, we now check for the presence of a Preelaborable_Initialization aspect on the type, and pass the aspect's expression (if any) on the call to Has_Preelaborable_Initialization (or pass Empty if the type has no such aspect or the aspect has no associated expression). * sem_util.ads (Has_Preelaborable_Initialization): Change Boolean formal parameter Formal_Types_Have_Preelab_Init to instead be a formal of type Node_Id (named Preelab_Init_Expr), to allow passing an expression that may be a conjunction of Preelaborable_Initialization aspects. Revise spec comment accordingly (and remove ??? comment). * sem_util.adb (Type_Named_In_Preelab_Init_Expression): New nested function with a result indicating whether a given type is named as the prefix of a Preelaborable_Initialization attribute in the expression of a corresponding P_I aspect. (Has_Preelaborable_Initialization): For generic formal derived and private types, test whether the type is named in the expression Preelab_Init_Expr (by calling Type_Named_In_Preelab_Init_Expression), and if so, treat the formal type as having preelaborable initialization (returning True). * libgnat/a-cobove.ads (Vector): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as Element_Type'Preelaborable_Initialization. (Cursor): Replace pragma P_I with the aspect (defaulting to True). * libgnat/a-cbdlli.ads (List): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as Element_Type'Preelaborable_Initialization. (Cursor): Replace pragma P_I with the aspect (defaulting to True). * libgnat/a-cbhama.ads (Map): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as (Element_Type'Preelaborable_Initialization and Key_Type'Preelaborable_Initialization). (Cursor): Replace pragma P_I with the aspect (defaulting to True). * libgnat/a-cborma.ads (Map): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as (Element_Type'Preelaborable_Initialization and Key_Type'Preelaborable_Initialization). (Cursor): Replace pragma P_I with the aspect (defaulting to True). * libgnat/a-cbhase.ads (Set): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as Element_Type'Preelaborable_Initialization. (Cursor): Replace pragma P_I with the aspect (defaulting to True). * libgnat/a-cborse.ads (Set): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as Element_Type'Preelaborable_Initialization. (Cursor): Replace pragma P_I with the aspect (defaulting to True). * libgnat/a-cbmutr.ads (Tree): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as Element_Type'Preelaborable_Initialization. (Cursor): Replace pragma P_I with the aspect (defaulting to True). * libgnat/a-coboho.ads (Holder): Replace pragma Preelaborable_Initialization with the aspect, specifying its value as Element_Type'Preelaborable_Initialization. (Cursor): Replace pragma P_I with the aspect (defaulting to True).
Diffstat (limited to 'gcc/expr.c')
0 files changed, 0 insertions, 0 deletions