1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
|
.. _Implementation_Defined_Characteristics:
**************************************
Implementation Defined Characteristics
**************************************
In addition to the implementation dependent pragmas and attributes, and the
implementation advice, there are a number of other Ada features that are
potentially implementation dependent and are designated as
implementation-defined. These are mentioned throughout the Ada Reference
Manual, and are summarized in Annex M.
A requirement for conforming Ada compilers is that they provide
documentation describing how the implementation deals with each of these
issues. In this chapter you will find each point in Annex M listed,
followed by a description of how GNAT handles the implementation dependence.
You can use this chapter as a guide to minimizing implementation
dependent features in your programs if portability to other compilers
and other operating systems is an important consideration. The numbers
in each entry below correspond to the paragraph numbers in the Ada
Reference Manual.
*
"Whether or not each recommendation given in Implementation
Advice is followed. See 1.1.2(37)."
See :ref:`Implementation_Advice`.
*
"Capacity limitations of the implementation. See 1.1.3(3)."
The complexity of programs that can be processed is limited only by the
total amount of available virtual memory, and disk space for the
generated object files.
*
"Variations from the standard that are impractical to avoid
given the implementation's execution environment. See 1.1.3(6)."
There are no variations from the standard.
*
"Which code_statements cause external
interactions. See 1.1.3(10)."
Any *code_statement* can potentially cause external interactions.
*
"The coded representation for the text of an Ada
program. See 2.1(4)."
See separate section on source representation.
*
"The semantics of an Ada program whose text is not in
Normalization Form C. See 2.1(4)."
See separate section on source representation.
*
"The representation for an end of line. See 2.2(2)."
See separate section on source representation.
*
"Maximum supported line length and lexical element
length. See 2.2(15)."
The maximum line length is 255 characters and the maximum length of
a lexical element is also 255 characters. This is the default setting
if not overridden by the use of compiler switch *-gnaty* (which
sets the maximum to 79) or *-gnatyMnn* which allows the maximum
line length to be specified to be any value up to 32767. The maximum
length of a lexical element is the same as the maximum line length.
*
"Implementation defined pragmas. See 2.8(14)."
See :ref:`Implementation_Defined_Pragmas`.
*
"Effect of pragma ``Optimize``. See 2.8(27)."
Pragma ``Optimize``, if given with a ``Time`` or ``Space``
parameter, checks that the optimization flag is set, and aborts if it is
not.
*
"The message string associated with the Assertion_Error exception raised
by the failure of a predicate check if there is no applicable
Predicate_Failure aspect. See 3.2.4(31)."
In the case of a Dynamic_Predicate aspect, the string is
"Dynamic_Predicate failed at <source position>", where
"<source position>" might be something like "foo.adb:123".
The Static_Predicate case is handled analogously.
*
"The predefined integer types declared in
``Standard``. See 3.5.4(25)."
.. tabularcolumns:: |l|L|
========================= =======================================
Type Representation
========================= =======================================
*Short_Short_Integer* 8-bit signed
*Short_Integer* 16-bit signed
*Integer* 32-bit signed
*Long_Integer* 64-bit signed (on most 64-bit targets,
depending on the C definition of long)
32-bit signed (on all other targets)
*Long_Long_Integer* 64-bit signed
*Long_Long_Long_Integer* 128-bit signed (on 64-bit targets)
64-bit signed (on 32-bit targets)
========================= =======================================
*
"Any nonstandard integer types and the operators defined
for them. See 3.5.4(26)."
There are no nonstandard integer types.
*
"Any nonstandard real types and the operators defined for
them. See 3.5.6(8)."
There are no nonstandard real types.
*
"What combinations of requested decimal precision and range
are supported for floating point types. See 3.5.7(7)."
The precision and range are defined by the IEEE Standard for Floating-Point
Arithmetic (IEEE 754-2019).
*
"The predefined floating point types declared in
``Standard``. See 3.5.7(16)."
====================== ===============================================
Type Representation
====================== ===============================================
*Short_Float* IEEE Binary32 (Single)
*Float* IEEE Binary32 (Single)
*Long_Float* IEEE Binary64 (Double)
*Long_Long_Float* IEEE Binary64 (Double) on non-x86 architectures
IEEE 80-bit Extended on x86 architecture
====================== ===============================================
The default rounding mode specified by the IEEE 754 Standard is assumed both
for static and dynamic computations (that is, round to nearest, ties to even).
The input routines yield correctly rounded values for Short_Float, Float, and
Long_Float at least. The output routines can compute up to twice as many exact
digits as the value of ``T'Digits`` for any type, for example 30 digits for
Long_Float; if more digits are requested, zeros are printed.
*
"The small of an ordinary fixed point type. See 3.5.9(8)."
The small is the largest power of two that does not exceed the delta.
*
"What combinations of small, range, and digits are
supported for fixed point types. See 3.5.9(10)."
For an ordinary fixed point type, on 32-bit platforms, the small must lie in
2.0**(-80) .. 2.0**80 and the range in -9.0E+36 .. 9.0E+36; any combination
is permitted that does not result in a mantissa larger than 63 bits.
On 64-bit platforms, the small must lie in 2.0**(-127) .. 2.0**127 and the
range in -1.0E+76 .. 1.0E+76; any combination is permitted that does not
result in a mantissa larger than 63 bits, and any combination is permitted
that results in a mantissa between 64 and 127 bits if the small is the
ratio of two integers that lie in 1 .. 2.0**127.
If the small is the ratio of two integers with 64-bit magnitude on 32-bit
platforms and 128-bit magnitude on 64-bit platforms, which is the case if
no ``small`` clause is provided, then the operations of the fixed point
type are entirely implemented by means of integer instructions. In the
other cases, some operations, in particular input and output, may be
implemented by means of floating-point instructions and may be affected
by accuracy issues on architectures other than x86.
For a decimal fixed point type, on 32-bit platforms, the small must lie in
1.0E-18 .. 1.0E+18 and the digits in 1 .. 18. On 64-bit platforms, the
small must lie in 1.0E-38 .. 1.0E+38 and the digits in 1 .. 38.
*
"The result of ``Tags.Expanded_Name`` for types declared
within an unnamed *block_statement*. See 3.9(10)."
Block numbers of the form :samp:`B{nnn}`, where *nnn* is a
decimal integer are allocated.
*
"The sequence of characters of the value returned by Tags.Expanded_Name
(respectively, Tags.Wide_Expanded_Name) when some of the graphic
characters of Tags.Wide_Wide_Expanded_Name are not defined in Character
(respectively, Wide_Character). See 3.9(10.1)."
This is handled in the same way as the implementation-defined behavior
referenced in A.4.12(34).
*
"Implementation-defined attributes. See 4.1.4(12)."
See :ref:`Implementation_Defined_Attributes`.
*
"The value of the parameter to Empty for some container aggregates.
See 4.3.5(40)."
As per the suggestion given in the Annotated Ada RM, the default value
of the formal parameter is used if one exists and zero is used otherwise.
*
"The maximum number of chunks for a parallel reduction expression without
a chunk_specification. See 4.5.10(21)."
Feature unimplemented.
*
"Rounding of real static expressions which are exactly half-way between
two machine numbers. See 4.9(38)."
Round to even is used in all such cases.
*
"The maximum number of chunks for a parallel generalized iterator without
a chunk_specification. See 5.5.2(10)."
Feature unimplemented.
*
"The number of chunks for an array component iterator. See 5.5.2(11)."
Feature unimplemented.
*
"Any extensions of the Global aspect. See 6.1.2(43)."
Feature unimplemented.
*
"The circumstances the implementation passes in the null value for a view
conversion of an access type used as an out parameter. See 6.4.1(19)."
Difficult to characterize.
*
"Any extensions of the Default_Initial_Condition aspect. See 7.3.3(11)."
SPARK allows specifying *null* as the Default_Initial_Condition
aspect of a type. See the SPARK reference manual for further details.
*
"Any implementation-defined time types. See 9.6(6)."
There are no implementation-defined time types.
*
"The time base associated with relative delays. See 9.6(20)."
See 9.6(20). The time base used is that provided by the C library
function ``gettimeofday``.
*
"The time base of the type ``Calendar.Time``. See 9.6(23)."
The time base used is that provided by the C library function
``gettimeofday``.
*
"The time zone used for package ``Calendar``
operations. See 9.6(24)."
The time zone used by package ``Calendar`` is the current system time zone
setting for local time, as accessed by the C library function
``localtime``.
*
"Any limit on *delay_until_statements* of
*select_statements*. See 9.6(29)."
There are no such limits.
*
"The result of Calendar.Formatting.Image if its argument represents more
than 100 hours. See 9.6.1(86)."
Calendar.Time_Error is raised.
*
"Implementation-defined conflict check policies. See 9.10.1(5)."
There are no implementation-defined conflict check policies.
*
"The representation for a compilation. See 10.1(2)."
A compilation is represented by a sequence of files presented to the
compiler in a single invocation of the *gcc* command.
*
"Any restrictions on compilations that contain multiple
compilation_units. See 10.1(4)."
No single file can contain more than one compilation unit, but any
sequence of files can be presented to the compiler as a single
compilation.
*
"The mechanisms for creating an environment and for adding
and replacing compilation units. See 10.1.4(3)."
See separate section on compilation model.
*
"The manner of explicitly assigning library units to a
partition. See 10.2(2)."
If a unit contains an Ada main program, then the Ada units for the partition
are determined by recursive application of the rules in the Ada Reference
Manual section 10.2(2-6). In other words, the Ada units will be those that
are needed by the main program, and then this definition of need is applied
recursively to those units, and the partition contains the transitive
closure determined by this relationship. In short, all the necessary units
are included, with no need to explicitly specify the list. If additional
units are required, e.g., by foreign language units, then all units must be
mentioned in the context clause of one of the needed Ada units.
If the partition contains no main program, or if the main program is in
a language other than Ada, then GNAT
provides the binder options *-z* and *-n* respectively, and in
this case a list of units can be explicitly supplied to the binder for
inclusion in the partition (all units needed by these units will also
be included automatically). For full details on the use of these
options, refer to *GNAT Make Program gnatmake* in the
:title:`GNAT User's Guide`.
*
"The implementation-defined means, if any, of specifying which compilation
units are needed by a given compilation unit. See 10.2(2)."
The units needed by a given compilation unit are as defined in
the Ada Reference Manual section 10.2(2-6). There are no
implementation-defined pragmas or other implementation-defined
means for specifying needed units.
*
"The manner of designating the main subprogram of a
partition. See 10.2(7)."
The main program is designated by providing the name of the
corresponding :file:`ALI` file as the input parameter to the binder.
*
"The order of elaboration of *library_items*. See 10.2(18)."
The first constraint on ordering is that it meets the requirements of
Chapter 10 of the Ada Reference Manual. This still leaves some
implementation-dependent choices, which are resolved by analyzing
the elaboration code of each unit and identifying implicit
elaboration-order dependencies.
*
"Parameter passing and function return for the main
subprogram. See 10.2(21)."
The main program has no parameters. It may be a procedure, or a function
returning an integer type. In the latter case, the returned integer
value is the return code of the program (overriding any value that
may have been set by a call to ``Ada.Command_Line.Set_Exit_Status``).
*
"The mechanisms for building and running partitions. See 10.2(24)."
GNAT itself supports programs with only a single partition. The GNATDIST
tool provided with the GLADE package (which also includes an implementation
of the PCS) provides a completely flexible method for building and running
programs consisting of multiple partitions. See the separate GLADE manual
for details.
*
"The details of program execution, including program
termination. See 10.2(25)."
See separate section on compilation model.
*
"The semantics of any non-active partitions supported by the
implementation. See 10.2(28)."
Passive partitions are supported on targets where shared memory is
provided by the operating system. See the GLADE reference manual for
further details.
*
"The information returned by ``Exception_Message``. See 11.4.1(10)."
Exception message returns the null string unless a specific message has
been passed by the program.
*
"The result of ``Exceptions.Exception_Name`` for types
declared within an unnamed *block_statement*. See 11.4.1(12)."
Blocks have implementation defined names of the form :samp:`B{nnn}`
where *nnn* is an integer.
*
"The information returned by
``Exception_Information``. See 11.4.1(13)."
``Exception_Information`` returns a string in the following format::
*Exception_Name:* nnnnn
*Message:* mmmmm
*PID:* ppp
*Load address:* 0xhhhh
*Call stack traceback locations:*
0xhhhh 0xhhhh 0xhhhh ... 0xhhh
where
* ``nnnn`` is the fully qualified name of the exception in all upper
case letters. This line is always present.
* ``mmmm`` is the message (this line present only if message is non-null)
* ``ppp`` is the Process Id value as a decimal integer (this line is
present only if the Process Id is nonzero). Currently we are
not making use of this field.
* The Load address line, the Call stack traceback locations line and the
following values are present only if at least one traceback location was
recorded. The Load address indicates the address at which the main executable
was loaded; this line may not be present if operating system hasn't relocated
the main executable. The values are given in C style format, with lower case
letters for a-f, and only as many digits present as are necessary.
The line terminator sequence at the end of each line, including
the last line is a single ``LF`` character (``16#0A#``).
*
"The sequence of characters of the value returned by
Exceptions.Exception_Name (respectively, Exceptions.Wide_Exception_Name)
when some of the graphic characters of Exceptions.Wide_Wide_Exception_Name
are not defined in Character (respectively, Wide_Character).
See 11.4.1(12.1)."
This is handled in the same way as the implementation-defined behavior
referenced in A.4.12(34).
*
"The information returned by Exception_Information. See 11.4.1(13)."
The exception name and the source location at which the exception was
raised are included.
*
"Implementation-defined policy_identifiers and assertion_aspect_marks
allowed in a pragma Assertion_Policy. See 11.4.2(9)."
Implementation-defined assertion_aspect_marks include Assert_And_Cut,
Assume, Contract_Cases, Debug, Ghost, Initial_Condition, Loop_Invariant,
Loop_Variant, Postcondition, Precondition, Predicate, Refined_Post,
Statement_Assertions, and Subprogram_Variant. Implementation-defined
policy_identifiers include Ignore and Suppressible.
*
"The default assertion policy. See 11.4.2(10)."
The default assertion policy is Ignore, although this can be overridden
via compiler switches such as "-gnata".
*
"Implementation-defined check names. See 11.5(27)."
The implementation-defined check names include Alignment_Check,
Container_Checks, Duplicated_Tag_Check, Predicate_Check,
Raise_Check, Tampering_Check, and Validity_Check. In addition, a
user program can add implementation-defined check names by means
of the pragma Check_Name. See the description of pragma
``Suppress`` for details.
*
"Existence and meaning of second parameter of pragma Unsuppress.
See 11.5(27.1)."
The legality rules for and semantics of the second parameter of pragma
Unsuppress match those for the second argument of pragma Suppress.
*
"The cases that cause conflicts between the representation of the
ancestors of a type_declaration. See 13.1(13.1)."
No such cases exist.
*
"The interpretation of each representation aspect. See 13.1(20)."
See separate section on data representations.
*
"Any restrictions placed upon the specification of representation aspects.
See 13.1(20)."
See separate section on data representations.
*
"Implementation-defined aspects, including the syntax for specifying
such aspects and the legality rules for such aspects. See 13.1.1(38)."
See :ref:`Implementation_Defined_Aspects`.
*
"The set of machine scalars. See 13.3(8.1)."
See separate section on data representations.
*
"The meaning of ``Size`` for indefinite subtypes. See 13.3(48)."
The Size attribute of an indefinite subtype is not less than the Size
attribute of any object of that type.
*
"The meaning of Object_Size for indefinite subtypes. See 13.3(58)."
The Object_Size attribute of an indefinite subtype is not less than the
Object_Size attribute of any object of that type.
*
"The default external representation for a type tag. See 13.3(75)."
The default external representation for a type tag is the fully expanded
name of the type in upper case letters.
*
"What determines whether a compilation unit is the same in
two different partitions. See 13.3(76)."
A compilation unit is the same in two different partitions if and only
if it derives from the same source file.
*
"Implementation-defined components. See 13.5.1(15)."
The only implementation defined component is the tag for a tagged type,
which contains a pointer to the dispatching table.
*
"If ``Word_Size`` = ``Storage_Unit``, the default bit
ordering. See 13.5.3(5)."
``Word_Size`` does not equal ``Storage_Unit`` in this implementation.
*
"The contents of the visible part of package ``System``. See 13.7(2)."
See the definition of package System in :file:`system.ads`.
Note that two declarations are added to package System.
.. code-block:: ada
Max_Priority : constant Positive := Priority'Last;
Max_Interrupt_Priority : constant Positive := Interrupt_Priority'Last;
*
"The range of Storage_Elements.Storage_Offset, the modulus of
Storage_Elements.Storage_Element, and the declaration of
Storage_Elements.Integer_Address. See 13.7.1(11)."
See the definition of package System.Storage_Elements in :file:`s-stoele.ads`.
*
"The contents of the visible part of package ``System.Machine_Code``,
and the meaning of *code_statements*. See 13.8(7)."
See the definition and documentation in file :file:`s-maccod.ads`.
*
"The result of unchecked conversion for instances with scalar result
types whose result is not defined by the language. See 13.9(11)."
Unchecked conversion between types of the same size
results in an uninterpreted transmission of the bits from one type
to the other. If the types are of unequal sizes, then in the case of
discrete types, a shorter source is first zero or sign extended as
necessary, and a shorter target is simply truncated on the left.
For all non-discrete types, the source is first copied if necessary
to ensure that the alignment requirements of the target are met, then
a pointer is constructed to the source value, and the result is obtained
by dereferencing this pointer after converting it to be a pointer to the
target type. Unchecked conversions where the target subtype is an
unconstrained array are not permitted. If the target alignment is
greater than the source alignment, then a copy of the result is
made with appropriate alignment
*
"The result of unchecked conversion for instances with nonscalar result
types whose result is not defined by the language. See 13.9(11)."
See preceding definition for the scalar result case.
*
"Whether or not the implementation provides user-accessible
names for the standard pool type(s). See 13.11(17)."
There are 3 different standard pools used by the compiler when
``Storage_Pool`` is not specified depending whether the type is local
to a subprogram or defined at the library level and whether
``Storage_Size``is specified or not. See documentation in the runtime
library units ``System.Pool_Global``, ``System.Pool_Size`` and
``System.Pool_Local`` in files :file:`s-poosiz.ads`,
:file:`s-pooglo.ads` and :file:`s-pooloc.ads` for full details on the
default pools used. All these pools are accessible by means of `with`\ ing
these units.
*
"The meaning of ``Storage_Size`` when neither the Storage_Size nor the
Storage_Pool is specified for an access type. See 13.11(18)."
``Storage_Size`` is measured in storage units, and refers to the
total space available for an access type collection, or to the primary
stack space for a task.
*
"The effect of specifying aspect Default_Storage_Pool on an instance
of a language-defined generic unit. See 13.11.3(5)."
Instances of language-defined generic units are treated the same as other
instances with respect to the Default_Storage_Pool aspect.
*
"Implementation-defined restrictions allowed in a pragma
``Restrictions``. See 13.12(8.7)."
See :ref:`Standard_and_Implementation_Defined_Restrictions`.
*
"The consequences of violating limitations on
``Restrictions`` pragmas. See 13.12(9)."
Restrictions that can be checked at compile time are enforced at
compile time; violations are illegal. For other restrictions, any
violation during program execution results in erroneous execution.
*
"Implementation-defined usage profiles allowed in a pragma Profile.
See 13.12(15)."
See :ref:`Implementation_Defined_Pragmas`.
*
"The contents of the stream elements read and written by the Read and
Write attributes of elementary types. See 13.13.2(9)."
The representation is the in-memory representation of the base type of
the type, using the number of bits corresponding to the
``type'Size`` value, and the natural ordering of the machine.
*
"The names and characteristics of the numeric subtypes
declared in the visible part of package ``Standard``. See A.1(3)."
See items describing the integer and floating-point types supported.
*
"The values returned by Strings.Hash. See A.4.9(3)."
This hash function has predictable collisions and is subject to
equivalent substring attacks. It is not suitable for construction of a
hash table keyed on possibly malicious user input.
*
"The value returned by a call to a Text_Buffer Get procedure if any
character in the returned sequence is not defined in Character.
See A.4.12(34)."
The contents of a buffer is represented internally as a UTF_8 string.
The value return by Text_Buffer.Get is the result of passing that
UTF_8 string to UTF_Encoding.Strings.Decode.
*
"The value returned by a call to a Text_Buffer Wide_Get procedure if
any character in the returned sequence is not defined in Wide_Character.
See A.4.12(34)."
The contents of a buffer is represented internally as a UTF_8 string.
The value return by Text_Buffer.Wide_Get is the result of passing that
UTF_8 string to UTF_Encoding.Wide_Strings.Decode.
*
"The accuracy actually achieved by the elementary
functions. See A.5.1(1)."
The elementary functions correspond to the functions available in the C
library. Only fast math mode is implemented.
*
"The sign of a zero result from some of the operators or
functions in ``Numerics.Generic_Elementary_Functions``, when
``Float_Type'Signed_Zeros`` is ``True``. See A.5.1(46)."
The sign of zeroes follows the requirements of the IEEE 754 standard on
floating-point.
*
"The value of
``Numerics.Float_Random.Max_Image_Width``. See A.5.2(27)."
Maximum image width is 6864, see library file :file:`s-rannum.ads`.
*
"The value of
``Numerics.Discrete_Random.Max_Image_Width``. See A.5.2(27)."
Maximum image width is 6864, see library file :file:`s-rannum.ads`.
*
"The string representation of a random number generator's
state. See A.5.2(38)."
The value returned by the Image function is the concatenation of
the fixed-width decimal representations of the 624 32-bit integers
of the state vector.
*
"The values of the ``Model_Mantissa``,
``Model_Emin``, ``Model_Epsilon``, ``Model``,
``Safe_First``, and ``Safe_Last`` attributes, if the Numerics
Annex is not supported. See A.5.3(72)."
Running the compiler with *-gnatS* to produce a listing of package
``Standard`` displays the values of these attributes.
*
"The value of ``Buffer_Size`` in ``Storage_IO``. See A.9(10)."
All type representations are contiguous, and the ``Buffer_Size`` is
the value of ``type'Size`` rounded up to the next storage unit
boundary.
*
"External files for standard input, standard output, and
standard error See A.10(5)."
These files are mapped onto the files provided by the C streams
libraries. See source file :file:`i-cstrea.ads` for further details.
*
"The accuracy of the value produced by ``Put``. See A.10.9(36)."
If more digits are requested in the output than are represented by the
precision of the value, zeroes are output in the corresponding least
significant digit positions.
*
"Current size for a stream file for which positioning is not supported.
See A.12.1(1.1)."
Positioning is supported.
*
"The meaning of ``Argument_Count``, ``Argument``, and
``Command_Name``. See A.15(1)."
These are mapped onto the ``argv`` and ``argc`` parameters of the
main program in the natural manner.
*
"The interpretation of file names and directory names. See A.16(46)."
These names are interpreted consistently with the underlying file system.
*
"The maxium value for a file size in Directories. See A.16(87)."
Directories.File_Size'Last is equal to Long_Long_Integer'Last .
*
"The result for Directories.Size for a directory or special file.
See A.16(93)."
Name_Error is raised.
*
"The result for Directories.Modification_Time for a directory or special file.
See A.16(93)."
Name_Error is raised.
*
"The interpretation of a nonnull search pattern in Directories.
See A.16(104)."
When the ``Pattern`` parameter is not the null string, it is interpreted
according to the syntax of regular expressions as defined in the
``GNAT.Regexp`` package.
See :ref:`GNAT.Regexp_(g-regexp.ads)`.
*
"The results of a Directories search if the contents of the directory are
altered while a search is in progress. See A.16(110)."
The effect of a call to Get_Next_Entry is determined by the current
state of the directory.
*
"The definition and meaning of an environment variable. See A.17(1)."
This definition is determined by the underlying operating system.
*
"The circumstances where an environment variable cannot be defined.
See A.17(16)."
There are no such implementation-defined circumstances.
*
"Environment names for which Set has the effect of Clear. See A.17(17)."
There are no such names.
*
"The value of Containers.Hash_Type'Modulus. The value of
Containers.Count_Type'Last. See A.18.1(7)."
Containers.Hash_Type'Modulus is 2**32.
Containers.Count_Type'Last is 2**31 - 1.
*
"Implementation-defined convention names. See B.1(11)."
The following convention names are supported
.. tabularcolumns:: |l|L|
======================= ==============================================================================
Convention Name Interpretation
======================= ==============================================================================
*Ada* Ada
*Ada_Pass_By_Copy* Allowed for any types except by-reference types such as limited
records. Compatible with convention Ada, but causes any parameters
with this convention to be passed by copy.
*Ada_Pass_By_Reference* Allowed for any types except by-copy types such as scalars.
Compatible with convention Ada, but causes any parameters
with this convention to be passed by reference.
*Assembler* Assembly language
*Asm* Synonym for Assembler
*Assembly* Synonym for Assembler
*C* C
*C_Pass_By_Copy* Allowed only for record types, like C, but also notes that record
is to be passed by copy rather than reference.
*COBOL* COBOL
*C_Plus_Plus (or CPP)* C++
*Default* Treated the same as C
*External* Treated the same as C
*Fortran* Fortran
*Intrinsic* For support of pragma ``Import`` with convention Intrinsic, see
separate section on Intrinsic Subprograms.
*Stdcall* Stdcall (used for Windows implementations only). This convention correspond
to the WINAPI (previously called Pascal convention) C/C++ convention under
Windows. A routine with this convention cleans the stack before
exit. This pragma cannot be applied to a dispatching call.
*DLL* Synonym for Stdcall
*Win32* Synonym for Stdcall
*Stubbed* Stubbed is a special convention used to indicate that the body of the
subprogram will be entirely ignored. Any call to the subprogram
is converted into a raise of the ``Program_Error`` exception. If a
pragma ``Import`` specifies convention ``stubbed`` then no body need
be present at all. This convention is useful during development for the
inclusion of subprograms whose body has not yet been written.
In addition, all otherwise unrecognized convention names are also
treated as being synonymous with convention C. In all implementations,
use of such other names results in a warning.
======================= ==============================================================================
*
"The meaning of link names. See B.1(36)."
Link names are the actual names used by the linker.
*
"The manner of choosing link names when neither the link name nor the
address of an imported or exported entity is specified. See B.1(36)."
The default linker name is that which would be assigned by the relevant
external language, interpreting the Ada name as being in all lower case
letters.
*
"The effect of pragma ``Linker_Options``. See B.1(37)."
The string passed to ``Linker_Options`` is presented uninterpreted as
an argument to the link command, unless it contains ASCII.NUL characters.
NUL characters if they appear act as argument separators, so for example
.. code-block:: ada
pragma Linker_Options ("-labc" & ASCII.NUL & "-ldef");
causes two separate arguments ``-labc`` and ``-ldef`` to be passed to the
linker. The order of linker options is preserved for a given unit. The final
list of options passed to the linker is in reverse order of the elaboration
order. For example, linker options for a body always appear before the options
from the corresponding package spec.
*
"The contents of the visible part of package
``Interfaces`` and its language-defined descendants. See B.2(1)."
See files with prefix :file:`i-` in the distributed library.
*
"Implementation-defined children of package
``Interfaces``. The contents of the visible part of package
``Interfaces``. See B.2(11)."
See files with prefix :file:`i-` in the distributed library.
*
"The definitions of certain types and constants in Interfaces.C.
See B.3(41)."
See source file :file:`i-c.ads`.
*
"The types ``Floating``, ``Long_Floating``,
``Binary``, ``Long_Binary``, ``Decimal_ Element``, and
``COBOL_Character``; and the initialization of the variables
``Ada_To_COBOL`` and ``COBOL_To_Ada``, in
``Interfaces.COBOL``. See B.4(50)."
===================== ====================================
COBOL Ada
===================== ====================================
*Floating* Float
*Long_Floating* (Floating) Long_Float
*Binary* Integer
*Long_Binary* Long_Long_Integer
*Decimal_Element* Character
*COBOL_Character* Character
===================== ====================================
For initialization, see the file :file:`i-cobol.ads` in the distributed library.
*
"The types Fortran_Integer, Real, Double_Precision, and Character_Set
in Interfaces.Fortran. See B.5(17)."
See source file :file:`i-fortra.ads`. These types are derived, respectively,
from Integer, Float, Long_Float, and Character.
*
"Implementation-defined intrinsic subprograms. See C.1(1)."
See separate section on Intrinsic Subprograms.
*
"Any restrictions on a protected procedure or its containing type when an
aspect Attach_handler or Interrupt_Handler is specified. See C.3.1(17)."
There are no such restrictions.
*
"Any other forms of interrupt handler supported by the Attach_Handler and
Interrupt_Handler aspects. See C.3.1(19)."
There are no such forms.
*
"The semantics of some attributes and functions of an entity for which
aspect Discard_Names is True. See C.5(7)."
If Discard_Names is True for an enumeration type, the Image attribute
provides the image of the Pos of the literal, and Value accepts
Pos values.
If both of the aspects``Discard_Names`` and ``No_Tagged_Streams`` are true
for a tagged type, its Expanded_Name and External_Tag values are
empty strings. This is useful to avoid exposing entity names at binary
level.
*
"The modulus and size of Test_and_Set_Flag. See C.6.3(8)."
The modulus is 2**8. The size is 8.
*
"The value used to represent the set value for Atomic_Test_and_Set.
See C.6.3(10)."
The value is 1.
*
"The result of the ``Task_Identification.Image``
attribute. See C.7.1(7)."
The result of this attribute is a string that identifies
the object or component that denotes a given task. If a variable ``Var``
has a task type, the image for this task will have the form :samp:`Var_{XXXXXXXX}`,
where the suffix *XXXXXXXX*
is the hexadecimal representation of the virtual address of the corresponding
task control block. If the variable is an array of tasks, the image of each
task will have the form of an indexed component indicating the position of a
given task in the array, e.g., :samp:`Group(5)_{XXXXXXX}`. If the task is a
component of a record, the image of the task will have the form of a selected
component. These rules are fully recursive, so that the image of a task that
is a subcomponent of a composite object corresponds to the expression that
designates this task.
If a task is created by an allocator, its image depends on the context. If the
allocator is part of an object declaration, the rules described above are used
to construct its image, and this image is not affected by subsequent
assignments. If the allocator appears within an expression, the image
includes only the name of the task type.
If the configuration pragma Discard_Names is present, or if the restriction
No_Implicit_Heap_Allocation is in effect, the image reduces to
the numeric suffix, that is to say the hexadecimal representation of the
virtual address of the control block of the task.
*
"The value of ``Current_Task`` when in a protected entry
or interrupt handler. See C.7.1(17)."
Protected entries or interrupt handlers can be executed by any
convenient thread, so the value of ``Current_Task`` is undefined.
*
"Granularity of locking for Task_Attributes. See C.7.2(16)."
No locking is needed if the formal type Attribute has the size and
alignment of either Integer or System.Address and the bit representation
of Initial_Value is all zeroes. Otherwise, locking is performed.
*
"The declarations of ``Any_Priority`` and
``Priority``. See D.1(11)."
See declarations in file :file:`system.ads`.
*
"Implementation-defined execution resources. See D.1(15)."
There are no implementation-defined execution resources.
*
"Whether, on a multiprocessor, a task that is waiting for
access to a protected object keeps its processor busy. See D.2.1(3)."
On a multi-processor, a task that is waiting for access to a protected
object does not keep its processor busy.
*
"The affect of implementation defined execution resources
on task dispatching. See D.2.1(9)."
Tasks map to threads in the threads package used by GNAT. Where possible
and appropriate, these threads correspond to native threads of the
underlying operating system.
*
"Implementation-defined task dispatching policies. See D.2.2(3)."
There are no implementation-defined task dispatching policies.
*
"The value of Default_Quantum in Dispatching.Round_Robin. See D.2.5(4)."
The value is 10 milliseconds.
*
"Implementation-defined *policy_identifiers* allowed
in a pragma ``Locking_Policy``. See D.3(4)."
The two implementation defined policies permitted in GNAT are
``Inheritance_Locking`` and ``Concurrent_Readers_Locking``. On
targets that support the ``Inheritance_Locking`` policy, locking is
implemented by inheritance, i.e., the task owning the lock operates
at a priority equal to the highest priority of any task currently
requesting the lock. On targets that support the
``Concurrent_Readers_Locking`` policy, locking is implemented with a
read/write lock allowing multiple protected object functions to enter
concurrently.
*
"Default ceiling priorities. See D.3(10)."
The ceiling priority of protected objects of the type
``System.Interrupt_Priority'Last`` as described in the Ada
Reference Manual D.3(10),
*
"The ceiling of any protected object used internally by
the implementation. See D.3(16)."
The ceiling priority of internal protected objects is
``System.Priority'Last``.
*
"Implementation-defined queuing policies. See D.4(1)."
There are no implementation-defined queuing policies.
*
"Implementation-defined admission policies. See D.4.1(1)."
There are no implementation-defined admission policies.
*
"Any operations that implicitly require heap storage
allocation. See D.7(8)."
The only operation that implicitly requires heap storage allocation is
task creation.
*
"When restriction No_Dynamic_CPU_Assignment applies to a partition, the
processor on which a task with a CPU value of a Not_A_Specific_CPU will
execute. See D.7(10)."
Unknown.
*
"When restriction No_Task_Termination applies to a partition, what happens
when a task terminates. See D.7(15.1)."
Execution is erroneous in that case.
*
"The behavior when restriction Max_Storage_At_Blocking is violated.
See D.7(17)."
Execution is erroneous in that case.
*
"The behavior when restriction Max_Asynchronous_Select_Nesting is violated.
See D.7(18)."
Execution is erroneous in that case.
*
"The behavior when restriction Max_Tasks is violated. See D.7(19)."
Execution is erroneous in that case.
* "Whether the use of pragma Restrictions results in a reduction in program
code or data size or execution time. See D.7(20)."
Yes it can, but the precise circumstances and properties of such reductions
are difficult to characterize.
*
"The value of Barrier_Limit'Last in Synchronous_Barriers. See D.10.1(4)."
Synchronous_Barriers.Barrier_Limit'Last is Integer'Last .
*
"When an aborted task that is waiting on a Synchronous_Barrier is aborted.
See D.10.1(13)."
Difficult to characterize.
*
"The value of Min_Handler_Ceiling in Execution_Time.Group_Budgets.
See D.14.2(7)."
See source file :file:`a-etgrbu.ads`.
*
"The value of CPU_Range'Last in System.Multiprocessors. See D.16(4)."
See source file :file:`s-multip.ads`.
*
"The processor on which the environment task executes in the absence
of a value for the aspect CPU. See D.16(13)."
Unknown.
*
"The means for creating and executing distributed
programs. See E(5)."
The GLADE package provides a utility GNATDIST for creating and executing
distributed programs. See the GLADE reference manual for further details.
*
"Any events that can result in a partition becoming
inaccessible. See E.1(7)."
See the GLADE reference manual for full details on such events.
*
"The scheduling policies, treatment of priorities, and management of
shared resources between partitions in certain cases. See E.1(11)."
See the GLADE reference manual for full details on these aspects of
multi-partition execution.
*
"Whether the execution of the remote subprogram is
immediately aborted as a result of cancellation. See E.4(13)."
See the GLADE reference manual for details on the effect of abort in
a distributed application.
*
"The range of type System.RPC.Partition_Id. See E.5(14)."
System.RPC.Partition_ID'Last is Integer'Last. See source file :file:`s-rpc.ads`.
*
"Implementation-defined interfaces in the PCS. See E.5(26)."
See the GLADE reference manual for a full description of all
implementation defined interfaces.
*
"The values of named numbers in the package
``Decimal``. See F.2(7)."
==================== ==========
Named Number Value
==================== ==========
*Max_Scale* +18
*Min_Scale* -18
*Min_Delta* 1.0E-18
*Max_Delta* 1.0E+18
*Max_Decimal_Digits* 18
==================== ==========
*
"The value of ``Max_Picture_Length`` in the package
``Text_IO.Editing``. See F.3.3(16)."
64
*
"The value of ``Max_Picture_Length`` in the package
``Wide_Text_IO.Editing``. See F.3.4(5)."
64
*
"The accuracy actually achieved by the complex elementary
functions and by other complex arithmetic operations. See G.1(1)."
Standard library functions are used for the complex arithmetic
operations. Only fast math mode is currently supported.
*
"The sign of a zero result (or a component thereof) from
any operator or function in ``Numerics.Generic_Complex_Types``, when
``Real'Signed_Zeros`` is True. See G.1.1(53)."
The signs of zero values are as recommended by the relevant
implementation advice.
*
"The sign of a zero result (or a component thereof) from
any operator or function in
``Numerics.Generic_Complex_Elementary_Functions``, when
``Real'Signed_Zeros`` is ``True``. See G.1.2(45)."
The signs of zero values are as recommended by the relevant
implementation advice.
*
"Whether the strict mode or the relaxed mode is the
default. See G.2(2)."
The strict mode is the default. There is no separate relaxed mode. GNAT
provides a highly efficient implementation of strict mode.
*
"The result interval in certain cases of fixed-to-float
conversion. See G.2.1(10)."
For cases where the result interval is implementation dependent, the
accuracy is that provided by performing all operations in 64-bit IEEE
floating-point format.
*
"The result of a floating point arithmetic operation in
overflow situations, when the ``Machine_Overflows`` attribute of the
result type is ``False``. See G.2.1(13)."
Infinite and NaN values are produced as dictated by the IEEE
floating-point standard.
Note that on machines that are not fully compliant with the IEEE
floating-point standard, such as Alpha, the *-mieee* compiler flag
must be used for achieving IEEE conforming behavior (although at the cost
of a significant performance penalty), so infinite and NaN values are
properly generated.
*
"The result interval for division (or exponentiation by a
negative exponent), when the floating point hardware implements division
as multiplication by a reciprocal. See G.2.1(16)."
Not relevant, division is IEEE exact.
*
"The definition of close result set, which determines the accuracy of
certain fixed point multiplications and divisions. See G.2.3(5)."
Operations in the close result set are performed using IEEE long format
floating-point arithmetic. The input operands are converted to
floating-point, the operation is done in floating-point, and the result
is converted to the target type.
*
"Conditions on a *universal_real* operand of a fixed
point multiplication or division for which the result shall be in the
perfect result set. See G.2.3(22)."
The result is only defined to be in the perfect result set if the result
can be computed by a single scaling operation involving a scale factor
representable in 64 bits.
*
"The result of a fixed point arithmetic operation in
overflow situations, when the ``Machine_Overflows`` attribute of the
result type is ``False``. See G.2.3(27)."
Not relevant, ``Machine_Overflows`` is ``True`` for fixed-point
types.
*
"The result of an elementary function reference in
overflow situations, when the ``Machine_Overflows`` attribute of the
result type is ``False``. See G.2.4(4)."
IEEE infinite and Nan values are produced as appropriate.
*
"The value of the angle threshold, within which certain
elementary functions, complex arithmetic operations, and complex
elementary functions yield results conforming to a maximum relative
error bound. See G.2.4(10)."
Information on this subject is not yet available.
*
"The accuracy of certain elementary functions for
parameters beyond the angle threshold. See G.2.4(10)."
Information on this subject is not yet available.
*
"The result of a complex arithmetic operation or complex
elementary function reference in overflow situations, when the
``Machine_Overflows`` attribute of the corresponding real type is
``False``. See G.2.6(5)."
IEEE infinite and Nan values are produced as appropriate.
*
"The accuracy of certain complex arithmetic operations and
certain complex elementary functions for parameters (or components
thereof) beyond the angle threshold. See G.2.6(8)."
Information on those subjects is not yet available.
*
"The accuracy requirements for the subprograms Solve, Inverse,
Determinant, Eigenvalues and Eigensystem for type Real_Matrix.
See G.3.1(81)."
Information on those subjects is not yet available.
*
"The accuracy requirements for the subprograms Solve, Inverse,
Determinant, Eigenvalues and Eigensystem for type Complex_Matrix.
See G.3.2(149)."
Information on those subjects is not yet available.
*
"The consequences of violating No_Hidden_Indirect_Globals. See H.4(23.9)."
Execution is erroneous in that case.
|